在JavaScript中,甚至prototy函數的pe屬性是一個對象。在創建一個其原型是您定義的原型的對象之前,Test1.Class1.prototype
只是一個常規對象。基本上,它的工作方式相同,下面的代碼片段:
var Test1 = { prototype { m1: function() {} } };
// You're trying to call an undefined function!
Test.m1();
// This is fine
Test1.prototype.m1();
在另一方面,當您使用new
運營商,您要創建一個新的對象,其原型是一組的構造函數。而這裏開始魔術:
var Test1 = function() {};
Test1.prototype = {
doStuff: function() {}
};
var object1 = new Test1();
// This works!
object1.doStuff();
當您訪問的屬性,JavaScript的運行時檢查對象,以找出是否有一個名爲doStuff
功能,否則它會尋找它的對象的原型,否則它看起來原型的原型等...
其實new
運營商是syntactic sugar。 ECMA腳本5中引入Object.create
這使得一切更加清晰:
var Test1 = {
doStuff: function() {
}
};
// The first parameter of Object.create is
// the object that's going to be the prototype of
// Test1 object!
var object1 = Object.create(Test1);
// This works too!
object1.doStuff();
也許你應該檢查這個其他Q &答:How does JavaScript .prototype work?
不但。怎麼樣'Object.create':D –