2014-05-01 82 views
-1

我讀的書JavaScript中的很大一部分,有一個例子prototype [name]和prototype.name有什麼區別?

Function.prototype.method = function(name, func){ 
    this.prototype[name] = func; 
    // this.prototype.name = func; 
    return this; 
}; 

Number.method("integer", function(){ 
    return Math[this<0 ? "ceiling" : "floor"](this); 
}); 

document.writeln((10/3).integer()); 

我想this.prototype [名] = FUNC;和this.prototype.name = func;是同樣的事情,但似乎他們不是。

當我在Chrome瀏覽器中註釋掉的語句,它顯示一個錯誤

「遺漏的類型錯誤:未定義是不是一個函數」

那麼,什麼是錯誤的說法?它不是將func分配給名稱嗎?

由於

+1

準相關:'ceil'不是'天花板'。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/ceil –

+0

嗨,我在Chrome上進行了測試,天花板和Ceil都在工作,但是仍然感謝 – user1888955

回答

5

表達

this.prototype.name = func; 

一個值分配給原型對象的 「name」 屬性。相比之下,這

this.prototype[name] = func; 
this.prototype[name] = func; 

將值分配給名稱由變量「name」的字符串值確定的屬性。區別在於,通過簡單的.引用,標識符本身將被視爲屬性名稱。用[],括號內的表達式被評估,被認爲是屬性名稱。

請注意,您的「整數」方法明確地利用了這種行爲只是幾行!

+0

感謝Pointy,那很棒! – user1888955

相關問題