Javascript子类化和createElement
函数A(){ this.myProp=document.createElement(“div”);} 这里发生的事情是,我最终得到了一个id为“再见”的div。我想要的是两个具有指定ID的div 我已经能够通过创建创建元素的“a”方法来解决这个问题Javascript子类化和createElement,javascript,dom,prototype,subclass,Javascript,Dom,Prototype,Subclass,函数A(){ this.myProp=document.createElement(“div”);} 这里发生的事情是,我最终得到了一个id为“再见”的div。我想要的是两个具有指定ID的div 我已经能够通过创建创建元素的“a”方法来解决这个问题 如果不使用该方法,我如何修复它?在创建新B()时,必须调用构造函数A(): 如果希望B实例继承自A.prototype,请不要将B.prototype设置为A实例,而是使用Object.create()-或传统浏览器的自定义实现-以避免构造函数调用:
如果不使用该方法,我如何修复它?在创建
新B()时,必须调用构造函数A()
:
如果希望B
实例继承自A.prototype
,请不要将B.prototype
设置为A
实例,而是使用Object.create()
-或传统浏览器的自定义实现-以避免构造函数调用:
var clone = Object.create || (function() {
function Dummy() {}
return function(obj) {
Dummy.prototype = obj;
return new Dummy;
};
})();
B.prototype = clone(A.prototype);
不起作用的代码是什么样子的?第115行开始,第337行结束感谢您的帮助回复。我不太明白为什么要使用Object.create()方法。你能解释一下吗?@willat8:构造函数用于创建和初始化实例,即分配实例所需的资源,但在原型对象中这是多余的;在您的例子中,这种资源的一个例子是myProp
元素;在其他情况下,后果可能更为严重:例如,考虑在初始化时将自己注册为事件侦听器的对象;你想让一个子类的原型对象来做这个吗?@ WelAT8:或者使用你的代码:考虑一个第三类<代码> c>代码>,扩展了<代码> b<代码>;使用C.prototype=newb('foo')
意味着您将在document.body
中添加一个与原型对象对应的div
。除了使用“a”实例之外,我可以将“B.prototype”设置为“a”的引用吗?如中所示,B.prototype=A@willat8:您可以使用B.prototype=A.prototype
,但这意味着A
和B
实例将共享同一个原型,即不可能重写方法
function A() {
this.myProp = document.createElement("div");
}
function B(id) {
A.call(this); // !!!
this.myProp.id = id;
document.body.appendChild(this.myProp);
}
var clone = Object.create || (function() {
function Dummy() {}
return function(obj) {
Dummy.prototype = obj;
return new Dummy;
};
})();
B.prototype = clone(A.prototype);