这是我的问题: 假设我有一个带有原型X的构造函数A(); 现在我有另一个构造函数B,我想从A继承。 所以我必须做这样的事情:B.prototype = Object.create(A.prototype);
但是为什么我不能调用B.prototype = A.prototype,因为Object.create(A.prototype)它是对A.prototype的eqaul?
或者不是调用Object.create我可以使用这样的函数:
function inherit(p) {
function f(){};
f.prototype = p;
return new f();
}
然后B.prototype = inherit(A.prototype)
。
有什么区别? 为什么不能调用B.prototype = A.prototype?
答案 0 :(得分:2)
这是因为如果你向B.prototype添加一些东西,你也会添加到A.prototype
但是为什么我不能称之为B.prototype = A.prototype Object.create(A.prototype)它是否与A.prototype相同?
如果你B.prototype = A.prototype
,那么两个原型都将指向相同的参考。如果您执行B.prototype = Object.create(A.prototype)
,那么B.prototype
将仅采用A.prototype
中的值,则引用不会相同。
所以,
B.prototype = A.prototype
B.prototype === A.prototype
// OUTPUT: true;
B.prototype = Object.create(A.prototype)
B.prototype === A.prototype
// OUTPUT: false;
修改强>
您可以使用generated typescript code example扩展而不使用Object.create
:
// b -> base class
// d -> new class
var __extends = function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
__.prototype = b.prototype;
d.prototype = new __();
};
答案 1 :(得分:-1)
因为继承你需要将原型指向构造函数。 所以你可以做任何一个。
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input id=a value="rarlib">
<button>CHECK</button>
<div id=r></div>
或者
B.prototype = Object.create(A.prototype)