引用自https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Inheritance_Revisited https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Inheritance_Revisited
对于来自 Java 或 C++ 的开发人员来说,JavaScript 有点令人困惑,
因为它都是动态的、都是运行时的,而且根本没有类。它是
所有只是实例(对象)。甚至我们模拟的“类”也只是
一个函数对象。
请注意,原型也是一个对象,因此它也可以拥有自己独特的原型
所以让你感到困惑的代码看起来像这样
a = Object.getPrototypeOf(element)
b = Object.getPrototypeOf(a)
可以翻译成这样
a = element.__proto__
b = element.__ptoto__.__proto__
我想现在已经很清楚了a != b
1) 每个object在 JavaScript 中有原型,您可以通过以下方式访问它__proto__
财产
2) Function也是一个object在 JavaScript 中
3)函数还有一个prototype
财产
4) We can通过使用关键字调用函数来在 JavaScript 中创建对象new
4) 功能prototype
is the initial __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__;
PS:也读一下这个https://stackoverflow.com/a/9220317/474290 https://stackoverflow.com/a/9220317/474290和这个https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Inheritance_Revisited https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Inheritance_Revisited