在javascript中继承了DOM元素对象!这段代码有什么问题?
Inheriting from the DOM Element object in javascript ! Whats wrong with this code?
我试图从DOM元素对象继承,所有的代码运行良好,当我创建对象但当我试图调用appendChild()方法,它给出了一个错误说:
MyObject doesn't have an appendChild method
下面是我的代码:
var content=document.createTextNode("This was dynamically created");
function MyObject(tagName){
Element.constructor.call(this,tagName);
this.prototype=Element.prototype;
this.prototype=Object.defineProperties(this.prototype,{
newMethod:function(){
//dosomething
}
});
}
var newObj=new MyObject("div");
newObj.appendChild(content);
虽然您做得不正确(稍后会详细介绍),但您最终试图传递一个继承自DOM Element而不是DOM Element本身的对象。这是不允许的。
这似乎应该工作,但DOM元素和DOM方法是宿主对象。它们不遵循您期望本机对象遵循的所有相同规则。.appendChild()
方法需要一个Element,而不是其他。所以你想做的事是行不通的。
关于你的继承方法,这是完全错误的。您不修改正在创建的新对象的.prototype
属性。修改构造函数的.prototype
。这样做一次,然后从构造函数创建的所有新对象都继承分配给该构造函数的.prototype
属性的对象。
因为没有继承,所以没有.appendChild()
方法。下面的代码修复了它,但由于上面给出的原因,它仍然不能工作。
function MyObject(tagName){
Element.call(this, tagName);
}
MyObject.prototype=Object.create(Element.prototype);
Object.defineProperties(MyObject.prototype,{
newMethod: {
value:function(){
//dosomething
}
}
});
你的属性描述符语法也是错误的,所以我修复了它。
这是因为调用Element的构造函数并没有创建DOM Element对象的实例,而是试图设置由DOM Element对象的构造函数设置的属性,例如
function MyObject(tagName){
Element.constructor.call(this, tagName);
}
var newObj=new MyObject("div");
不会创建tagName
属性,就像我们创建DOM Element对象和
alert("Tag Name is set to "+newObj.tagName);
将显示Tag Name is set to undefined
作为构造函数试图设置它,但它不能,因为没有tagName
属性,但如果我用document.createElement(tagName)
代替Element.constructor.call(this, tagName);
,你会得到结果
Tag Name is set to DIV
相关文章:
- JavaScript代码问题:我正在将对象转换为数组
- 简单的Javascript代码问题
- 如果调试器关闭,Internet Explorer将出现运行代码问题
- AJAX自定义错误处理代码问题
- 花式盒子代码问题
- 谷歌分析事件跟踪代码问题
- 面临使用 javascript 的代码问题
- HTML页面头部出现Javascript代码问题
- JavaScript中的未来日期代码问题
- JavaScript代码问题
- js警报框中的资源文件变量给出字符串ASCII代码问题
- JQuery隐藏列表项超过5个代码问题
- AngularJS和JSON的代码问题
- Javascript代码问题"和& # 39;
- 验证代码问题
- 解析云代码问题中的条带模块
- SVG嵌入到HTML中,拖放代码问题
- 更新面板中的中继器- itemcommand代码问题-调用javascript函数与ScriptManager在代码后面
- Owl Carousel: Javascript不加载.Shopify问题或代码问题
- 从JSFiddle复制代码问题