gpt4 book ai didi

javascript - A.prototype = B.prototype 和 A.prototype = new B() 有什么区别?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:01:52 29 4
gpt4 key购买 nike

我正在学习 JavaScript,发现了两种分配原型(prototype)的方法。

第一个是A.prototype = B.prototype,第二个是A.prototype = new B()

例如:

function A() {
console.log("A!")
}

function B() {
console.log("B!")
}

// First case
A.prototype = B.prototype;
a = new A(); // a instanceof A,B

// Second case
A.prototype = new B();
a = new A(); // a instanceof A,B
  1. 有什么不同吗?更喜欢哪种方式?
  2. 还有其他方法可以分配原型(prototype)吗?

更新:

正如 Felix Kling 所建议的,还有第三种分配原型(prototype)的方法:

A.prototype = Object.create(B.prototype);

最佳答案

这只是另一种技术。

A.prototype = B.prototype;

通过这样做,对 B 原型(prototype)的任何更改也会更改 A 原型(prototype),因为它们是相同的对象,这必然会产生不良的副作用。

 A.prototype = new B();

使用它,我们还可以通过原型(prototype)实现继承。

我们通过使 A 原型(prototype)成为 B 的实例,使 A 成为 B

示例#1:

function A() {  console.log("A!")}
function B() { console.log("B!")}
A.prototype = new B();
a = new A();
B.bb=function (){alert('');}
console.log(a.bb()) //Uncaught TypeError: Object #<B> has no method 'bb'

现在看看这个:

function A() {  console.log("A!")}
function B() { console.log("B!")}
A.prototype = B.prototype;
a = new A();
B.prototype.bb=function (){alert('');}
console.log(a.bb()) //does alert

关于javascript - A.prototype = B.prototype 和 A.prototype = new B() 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21546841/

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