[英]How can I inherit from a function without bollocksing the ability to use the 'name' property?
在javascript中,似乎如果對象繼承自函數,則根本無法使用name屬性。 我已經在node.js中對其進行了測試,並且在各種瀏覽器中也可能是如此。 例如:
var A = function() {}
A.prototype = function() {}
var x = new A()
x.name = "bob"
console.log(x.name) // logs blank
在這種情況下,您無法覆蓋對象原型(即__proto__
)中給出的屬性,這似乎很荒謬。 我要瘋了嗎?
嗯,這不是因為功能,而是因為原型中有一個該名稱writable
false
的描述符 。 Object.getOwnPropertyDescriptor(function(){}, "name").writable === false
如果正常創建一個描述的不可寫屬性,也會發生同樣的情況:
function A() {
}
Object.defineProperty( A.prototype, "name", {
value: ""
});
var a = new A()
a.name
//""
a.name = "bob"
//"bob"
a.name
//""
您需要通過Object.defineProperty
來做到這一點:
Object.defineProperty(x, "name", {value: "bob"})
x.name
//"bob"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.