如何在没有使用'name'属性的情况下从函数继承?

时间:2013-07-23 07:10:59

标签: javascript node.js prototype-chain

在javascript中,似乎一个对象继承自一个函数,它根本就不能使用name属性。我已经在node.js中对此进行了测试,并且在各种浏览器中可能都是如此。 E.g:

var A = function() {}
    A.prototype = function() {}

var x = new A()
x.name = "bob"
console.log(x.name) // logs blank

在这种情况下,你无法覆盖对象原型中给出的属性(即__proto__)似乎是荒谬的。我疯了吗?

1 个答案:

答案 0 :(得分:1)

这不是因为功能,而是因为writable false的名称有descriptor in the prototypeObject.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"