gpt4 book ai didi

javascript - javascript中的原型(prototype)继承问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:37:48 25 4
gpt4 key购买 nike

我明白什么是原型(prototype)继承,但我一定对实现感到困惑。我认为修改函数构造函数的原型(prototype)会影响该构造函数的所有实例,但事实并非如此。 JS是如何从一个对象到它的原型(prototype)进行方法查找的?

举个例子

function A(name){
this.name = name;
}

a = new A("brad");

A.prototype = {
talk: function(){
return "hello " + this.name;
}
}

a.talk() // doesn't work
b = new A("john");
b.talk() // works

我的印象是 a 会在 A 的原型(prototype)中寻找方法 talk(),所以对 的任何修改code>A 的原型(prototype),在 a 被实例化之前或之后都会被反射(reflect)出来,但事实似乎并非如此。有人可以为我解释一下吗?

最佳答案

这是修改替换原型(prototype)的区别。

function A(name){
this.name = name;
}

a = new A("brad");
// Change, don't replace.
A.prototype.talk = function(){
return "hello " + this.name;
};

a.talk() // works
b = new A("john");
b.talk() // works

事情是这样的:

// Continued from above
var old_proto = A.prototype;

// Nuke that proto
A.prototype = {
talk: function() {
return "goodbye " + this.name;
}
};

var c = new A("Al");

a.talk() // hello brad
b.talk() // hello john
c.talk() // goodbye Al

old_proto.say_goodbye = function() {
return "goodbye " + this.name;
};

a.say_goodbye() // goodbye brad
b.say_goodbye() // goodbye john
c.say_goodbye() // TypeError c.say_goodbye is not a function.

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

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