数字直接挪用函数:(5).fn1(2).fn2(3)完成5-2+3

原由

在网上无意间看到这么一道题,第一次实践,直接报错,所以记录下来加深影象

历程

一看到数字能够挪用函数,最早想到的相似的场景就是
(5).toFixed(2),那末接下来,有两个思绪了

1、重写Number原型对象中的要领

2、在Number的原型对象中增加要领

思绪一在实践历程当中,终究在
bind要领中丢失了自我,末了摒弃医治,先记下来今后再战。

思绪二,本人没有细致斟酌,直接写了下面一段代码

Number.prototype.fn1 = function (item){
    const value = this.valueOf(); // value

    const result = value - item;

    return result;
};
        
Number.prototype.fn2 = function (item){
    const value = this.valueOf(); // value

    const result = value + item;

    return result;
}
        
console.log((5).fn1(2).fn2(3));

效果就是报错:
fn1未定义

打断点,发明没有挪用
fn1,而是在
fn2定义的时刻直接报错,在控制台打印
Number.prototype,发明
fn1在打印出的对象中,
fn2却没有涌现。

一番死脑筋的查询材料,终究在mdn上,发明
Number.prototype
configurable属性为
false

处理

那末题目好办了,
Number.prototype继续于
Object.prototype
Object.prototype
configurable属性值是
true。变动代码以下

Object.prototype.fn1 = function (item){
    const value = this.valueOf(); // value

    const result = value - item;

    return (result);
    // return result; 不加()的话,背面的.会被识别为小数点哦
};
        
Object.prototype.fn2 = function (item){
    const value = this.valueOf(); // value

    const result = value + item;

    return result;
}
        
console.log((5).fn1(2).fn2(3));

ok,题目到这里完毕,别的,顺手查了
String.prototype
Boolean.prototype,它们的
configurable属性值也是
false

遗留题目

实在,删撤除上述
Number.prototype.fn2,只实行
(5).fn1(2)是能够的,为何加一个属性能够,加两个却不可,正在研讨,也愿望有高人解答。

Number.prototype.fn1 = function (item){
    const value = this.valueOf(); // value

    const result = value - item;

    return (result);
};
        
console.log((5).fn1(2));
    原文作者:远远的飞梦
    原文地址: https://segmentfault.com/a/1190000018373616
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞