簡體   English   中英

我如何從一個函數繼承而又不增加使用'name'屬性的能力?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM