Object.getPrototypeOf() confusion
Object.getPrototypeOf() confusion
Object.getPrototypeOf(obj)是如何工作的?
根据定义,Object.getPrototypeOf(obj)应该返回Object的原型属性,或者以其他方式返回与obj.structor.prototype.相同的属性
使用new创建的对象使用其构造函数的prototype属性值作为其原型。
举个例子:
>element = document.getElementById("test")
>a = Object.getPrototypeOf(element)
HTMLDivElement
假设HTMLDivElement是元素的原型。
>a.constructor.prototype
HTMLDivElement
所以a.constructor.prototype是HTMLDivElement,所以Object.getPrototypeOf(a)应该返回HTMLDivElement但它返回HTMLElement。我完全混淆了getPrototypeOf()的定义。
>b = Object.getPrototypeOf(a)
HTML元素---->为什么?a.constructor.prototype是HTMLDivElement
实际上,它返回了prototype的proto属性,根据getPrototypeOf()的定义,这不是错误的吗?
>a.constructor.prototype.__proto__
HTMLElement
引用自https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Inheritance_Revisited
JavaScript对于来自Java或C++的开发人员来说有点令人困惑,因为它都是动态的,都是运行时的,而且根本没有类。它是所有只是实例(对象)。即使是我们模拟的"类"函数对象。
注意原型也是一个对象,因此它也可以拥有自己独特的原型
所以让你感到困惑的代码看起来像这个
a = Object.getPrototypeOf(element)
b = Object.getPrototypeOf(a)
可以翻译成这个
a = element.__proto__
b = element.__ptoto__.__proto__
我认为现在很清楚a != b
1) JavaScript中的每个对象都有一个原型,您可以通过__proto__
属性访问它
2) 函数也是Javascript 中的对象
3) 函数还具有prototype
属性
4) 我们可以通过调用关键字为new
的函数在JavaScript中创建对象
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);
这个代码等于这个
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__;
附言:也读这个https://stackoverflow.com/a/9220317/474290这个https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Inheritance_Revisited
var elem = document.getElementsByTagName("div")[0],
a = Object.getPrototypeOf ( elem );
console.log( elem.__proto__ ); //HTMLDivElement
console.log( a ); // HTMLDivElement
console.log( a.__proto__ ); //HTMLElement
console.log( Object.getPrototypeOf ( a ) ); //HTMLElement
所以Object.getPrototypeOf
返回object.__proto__
(object.constructor.prototype
)
- getDate() slice() confusion
- Confusion with window.onload
- Object.getPrototypeOf() confusion
- d3 selectAll Confusion
- HTML/Javascript Confusion
- Regex Confusion JavaScript
- Ember.js JSON API confusion
- JavaScript 'this' confusion
- $scope and $rootscope confusion
- HTMLCollection confusion
- CSS3 translateX confusion
- jQuery slideToggle confusion
- isNaN() vs. parseInt() confusion
- MYSQL + Node.JS Post Request Confusion
- Node.js, PHP, Javascript Confusion
- Babel and Browserify / Webpack confusion
- Confusion with javascript array.splice()
- paper.js and javascript 'this' confusion
- javascript onclick in html confusion
- Jquery resize() api confusion