Javascript DOM对象中的继承和原型链
我只需要一些没有任何代码示例的解释。我知道什么是对象、构造函数和原型。我就是搞不懂Javascript DOM对象中的继承和原型链,javascript,object,dom,constructor,prototype,Javascript,Object,Dom,Constructor,Prototype,我只需要一些没有任何代码示例的解释。我知道什么是对象、构造函数和原型。我就是搞不懂HTMLElement和htmldevelment之间的关系,或者htmlmedialelement和HTMLVideoElement之间的关系。我知道有类似于原型链的东西,对象可以访问其构造函数的原型。但是htmlidevelment构造函数是Function(),而不是HTMLElement(),另一方面,在htmlideelement中,我可以访问htmledielement原型的所有方法和属性。如果有人能为
HTMLElement
和htmldevelment
之间的关系,或者htmlmedialelement
和HTMLVideoElement
之间的关系。我知道有类似于原型链的东西,对象可以访问其构造函数的原型。但是htmlidevelment
构造函数是Function(),而不是HTMLElement()
,另一方面,在htmlideelement
中,我可以访问htmledielement
原型的所有方法和属性。如果有人能为我澄清一下,我将不胜感激。总之,什么是关系,什么创建了函数之间的链,比如说函数htmldevelment()
->函数HTMLElement()
->函数元素()
->函数节点()
->函数对象()
在Javascript中,用户创建的对象与平台(如web浏览器)提供的对象之间存在差异
本机对象可能对构造函数
和原型
有帮助的值。宿主对象通常不会,因为不能以相同的方式构造它们
实际的属性查找是使用内部原型属性完成的。这可以通过使用Object.getPrototypeOf
或\uuuu proto\uuu
属性找到。通过检查这些,您可以看到原型链。请注意,\uuuuu proto\uuuuu
更具可读性,并且可能在现代web浏览器中工作,但是Object.getPrototypeOf
是规范推荐的方法
例如,假定vid
是对视频节点的引用:
vid.__proto__ // the HTMLVideoElement object
vid.__proto__.__proto__ // the HTMLMediaElement object
vid.__proto__.__proto__.__proto__ // the HTMLElement object
// or equivalents
Object.getPrototypeOf(vid) // the HTMLVideoElement
Object.getPrototypeOf(Object.getPrototypeOf(vid)) // the HTMLMediaElement object
Object.getPrototypeOf(Object.getPrototypeOf(Object.getPrototypeOf(vid))) // the HTMLElement object
一直到
vid.__proto__.__proto__.__proto__.__proto__.__proto__.__proto__.__proto__ // === Object.prototype
// or
Object.getPrototypeOf(Object.getPrototypeOf(Object.getPrototypeOf(Object.getPrototypeOf(Object.getPrototypeOf(Object.getPrototypeOf(Object.getPrototypeOf(vid)))))))
查看“真实”原型链的方法是使用这种方法。只是一种假设。是
htmlevelement
的子类,然后是htmlevelement.prototype.constructor==htmlevelement
。但是,两者的原型和构造函数似乎都依赖于浏览器本机代码。HTMLElement
和htmldevelment
等不是JS对象,而是。它不是函数之间的链条。这是它们的.prototype
对象之间的一条链,因此我可以用同样的方法创建我自己对象的.prototype
之间的链,以便在非同一构造函数的对象之间共享它们的属性和方法吗?\uuu proto\uuu
不推荐使用,请使用对象.getPrototypeOf
only@Bergi你说得对,我太懒了。这是一种更容易掌握的方法,它在规范中,但您是对的,Object.getPrototypeOf更好。