gpt4 book ai didi

javascript - javascript中的原型(prototype)行为

转载 作者:行者123 更新时间:2023-11-30 18:00:19 25 4
gpt4 key购买 nike

我对 javascript 中的以下原型(prototype)行为感到困惑。

function A(){
};

A.prototype.toString = function(){
console.log('first');
}

var a = new A(), b;

A.prototype = {
toString:function(){
console.log('second');
}
}

b = new A();

a.toString();
//outputs : first

b.toString();
//outputs : second

与打印“second”的b.toString 相比,为什么a.toString 仍然打印“frist”。谁能解释一下我在这里缺少什么。

最佳答案

原型(prototype)链接与构造的构造函数无关对象,它存储在对象本身上。

当您调用 new A() 时,会发生这种情况:

var a = {};
a.__proto__ = A.prototype;
A.call(a);

请注意,以上不是标准语法,但可以在 chrome 和 firefox 中使用。

因此,当您覆盖 A.prototype 时,a.__proto__ 仍然链接到旧的 A.prototype,正如您所期望的那样代码:

var A = 10, a, b;

a = A;
A = 7; //a is still 10
b = A;

我不建议重新分配原型(prototype),因为那样你需要重新建立构造函数属性并且需要额外的缩进级别。

如果你想减少输入,只需存储对原型(prototype)的引用:

function A() {

}
var fn = A.prototype;

fn.toString = function() {

};

fn.valueOf = function() {

};

fn.toJSON = function() {

};

关于javascript - javascript中的原型(prototype)行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17179603/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com