我正在学习JavaScript,并找到了两种分配原型的方法。
第一个是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更新:
正如Felix建议的那样,还有第三种分配原型的方法:
A.prototype = Object.create(B.prototype);发布于 2014-02-04 08:00:41
这只是另一种技术。
A.prototype = B.prototype;通过这样做,对B原型的任何更改也会更改A原型,因为它们是同一个对象,这必然会产生不良的副作用。
A.prototype = new B();使用它,我们还可以通过原型来实现继承。
我们通过使A原型成为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发布于 2014-02-04 08:01:13
您可以尝试在B中添加一些内容,这样就可以得到不同的结果:
function A() {
console.log("A!")
}
function B() {
this.text = "aaa";
}你将拥有:
// First case
A.prototype = B.prototype;
a = new A();
// a --> {}
// Second case
A.prototype = new B();
a = new A(); // a instanceof A,B
// a --> { text="aaa" }发布于 2017-02-08 16:27:33
@Iaroslav Karandashev,区别是在一种情况下,您只继承功能
A.prototype = B.prototype;在另一种情况下,您可以同时继承状态和功能。
A.prototype = new B();您可以稍微修改第一种情况,以便具有相同的行为:
// First case
function B() {
console.log("B!")
}
//child:
function A() {
console.log("A!")
//invoke parent constructor:
B.apply(this);
}
A.prototype = B.prototype;
a = new A(); // a instanceof A,B
// Second case
function B() {
console.log("B!")
}
//child, you do not need to invoke constructor of base class:
function A() {
console.log("A!")
}
//base class constructor is invoked here:
A.prototype = new B();
a = new A(); // a instanceof A,Bhttps://stackoverflow.com/questions/21546841
复制相似问题