Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript DOM对象中的继承和原型链_Javascript_Object_Dom_Constructor_Prototype - Fatal编程技术网

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更好。