Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从函数继承而不使用';名称';财产?_Javascript_Node.js_Prototype Chain - Fatal编程技术网

Javascript 如何从函数继承而不使用';名称';财产?

Javascript 如何从函数继承而不使用';名称';财产?,javascript,node.js,prototype-chain,Javascript,Node.js,Prototype Chain,在javascript中,如果一个对象继承自一个函数,它就不能使用name属性。我在node.js中测试过这一点,在各种浏览器中可能都是如此。例如: var A = function() {} A.prototype = function() {} var x = new A() x.name = "bob" console.log(x.name) // logs blank 在这种情况下,您不能覆盖对象原型(即\uuuuu proto\uuuu)中给定的属性,这似乎很荒谬。我疯了吗

在javascript中,如果一个对象继承自一个函数,它就不能使用name属性。我在node.js中测试过这一点,在各种浏览器中可能都是如此。例如:

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

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

在这种情况下,您不能覆盖对象原型(即
\uuuuu proto\uuuu
)中给定的属性,这似乎很荒谬。我疯了吗?

这不是因为函数,而是因为该名称有一个可写的
<代码>对象。getOwnPropertyDescriptor(函数(){},“名称”)。可写===false

如果您正常创建描述的不可写入属性,也会发生同样的情况:

function A() {

}

Object.defineProperty( A.prototype, "name", {
    value: ""
});

var a = new A()

a.name
//""
a.name = "bob"
//"bob"
a.name
//""
您需要遍历
对象。要执行此操作,请定义属性:

Object.defineProperty(x, "name", {value: "bob"})
x.name
//"bob"

为什么要为
a.prototype
分配一个函数?因为我正在编写一个继承模块,能够这样做会使它不那么麻烦(现在像'name'和'caller'这样的属性不能使用我的模块作为静态属性访问)好信息,但我仍然认为这有点坏——因为它几乎肯定会咬陌生人。我将坚持一段时间,等待一个神奇的治愈一切。@BT好吧,就是这样,JS中的许多东西都会咬到不熟悉的人,但语言不能轻易地有向后兼容性破坏的变化。我想没有多少应用程序会因为修复这个而被破坏,但我不能确定。也可以通过delibarate设计,例如,在原型中描述的属性名称具有可写性,而不是在每个单独的实例上。同样,将函数作为原型也没有意义,因为这些方法都是硬连接的,只能处理作为接收器的实际函数。但我认为使用函数作为原型很有意义——可能只是不在javascript中;)那有什么意义呢?如果你承认它在Javascript中没有任何意义,为什么要问这个问题。我承认这种可能性,而不是事实。如果将函数用作原型意味着对象可以像函数一样使用,那么这是非常有意义的。会产生一些有趣的结构。此外,我还创建了一个继承函数,它在允许继承的同时省略了新操作符。如果我能够将生成的函数用作原型,它将使这个库更干净。