我正在尝试学习JavaScript,并希望了解为什么以下内容无效。 这是HTML:
<canvas id="MyCanvas" width="640" height="480"></canvas>
JavaScript:
MyCanvas = function (bar) {
this.foo = bar;
}
MyCanvas.prototype = document.getElementById('MyCanvas');
var c = new MyCanvas(20);
alert(c.id);
我原本以为'MyCanvas'会收到警报,因为我将原型设置为id属性具有该值的对象。您可以查看以下小提琴:http://jsfiddle.net/2V9KQ/2/
答案 0 :(得分:1)
问题是画布没有自己的id
属性:
// Setup
var c = document.createElement('canvas');
c.id = "MyCanvas";
// Tests
c.hasOwnProperty('id'); // false
HTMLCanvasElement.prototype.hasOwnProperty('id'); // false
HTMLElement.prototype.hasOwnProperty('id'); // false
Element.prototype.hasOwnProperty('id'); // true
基本上,会发生的事情是id
属性仅在Element.prototype
中定义,并且它具有getter和setter。设置或获取信息时,信息存储在Element
实例的内部属性中或从中读取。
但是,您在id
的实例上使用属性MyCanvas
,该实例不是真正的元素(尽管它是Element
的实例)。然后,Element.prototype.id
的吸气剂和制定者不会工作。