原由
在網上無心間看到這麼一道題,第一次實踐,直接報錯,因此記錄下來加深記憶
過程
一看到數字能夠調用函數,最早想到的相似的場景就是
(5).toFixed(2)
,那麼接下來,有兩個思路了
一、重寫Number原型對象中的方法
二、在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));