Object.getPrototypeOf(obj)如何工作?
根据定义,Object.getPrototypeOf(obj)应该返回Object的prototype属性,或者以其他方式与obj.constructor.prototype相同.
使用new创建的对象使用其构造函数的prototype属性的值作为其原型.
让我们举一个例子:
>element = document.getElementById("test")
>a = Object.getPrototypeOf(element)
HTMLDivElement
Run Code Online (Sandbox Code Playgroud)
假设HTMLDivElement是元素的原型.
>a.constructor.prototype
HTMLDivElement
Run Code Online (Sandbox Code Playgroud)
所以a.constructor.prototype是HTMLDivElement所以Object.getPrototypeOf(a)应该返回HTMLDivElement,但它返回HTMLElement.我对getPrototypeOf()的定义感到困惑.
>b = Object.getPrototypeOf(a)
Run Code Online (Sandbox Code Playgroud)
HTMLElement ---->为什么?a.constructor.prototype是HTMLDivElement
实际上它正在返回原型的proto属性,根据getPrototypeOf()的定义是不是错了?
>a.constructor.prototype.__proto__
HTMLElement
Run Code Online (Sandbox Code Playgroud)
obe*_*iro 12
来自https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Inheritance_Revisited
JavaScript对于来自Java或C++的开发人员来说有点令人困惑,因为它都是动态的,所有运行时,并且它根本没有类.它只是实例(对象).甚至我们模拟的"类"也只是一个函数对象.
请注意,原型也是一个对象,所以它也有自己独特的原型
所以让你混淆的代码看起来像这样
a = Object.getPrototypeOf(element)
b = Object.getPrototypeOf(a)
Run Code Online (Sandbox Code Playgroud)
可以翻译成这个
a = element.__proto__
b = element.__ptoto__.__proto__
Run Code Online (Sandbox Code Playgroud)
我想现在已经很清楚了 a != b
1)JavaScript 中的每个对象都有一个原型,您可以通过该__proto__属性访问它
2)函数也是Javascript中的一个对象
3)功能也有prototype属性
4)我们可以通过调用带关键字的函数在JavaScript中创建对象new
4)函数prototype是由它们创建的任何对象的首字母 __proto__
要创建新对象,我们可以写这样的东西
//here we define a function
function SomeFunctionThatCreateObject() {
this.someStringProperty = "blablabla";
}
var obj = new SomeFunctionThatCreateObject(); //we create new object with function
var p = Object.getPrototypeOf(obj);
Run Code Online (Sandbox Code Playgroud)
这段代码与此相同
var SomeFunctionThatCreateObject = function(@this) {
@this.someStringProperty = "blablabla";
return @this;
};
SomeFunctionThatCreateObject.prototype = {}; //note that prototype is also an object
var obj = {};
obj = SomeFunctionThatCreateObject(obj);
obj.constructor = SomeFunctionThatCreateObject;
obj.__proto__ = SomeFunctionThatCreateObject.prototype;
var p = obj.__proto__;
Run Code Online (Sandbox Code Playgroud)
PS:还阅读了这个 /sf/answers/645422221/ 和这个 https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Inheritance_Revisited
| 归档时间: |
|
| 查看次数: |
4735 次 |
| 最近记录: |