In JavaScript, auch die prototy m1
bearbeiten zugänglich sein Die Eigenschaft einer Funktion ist ein Objekt. Bevor Sie ein Objekt erstellen, dessen Prototyp das von Ihnen definierte ist, ist Test1.Class1.prototype
nur ein normales Objekt. Im Grunde funktioniert es die gleiche Art und Weise wie der folgende Code-Schnipsel:
var Test1 = { prototype { m1: function() {} } };
// You're trying to call an undefined function!
Test.m1();
// This is fine
Test1.prototype.m1();
In der anderen Hand, wenn Sie die new
Operator verwenden, sind Sie ein neues Objekt, dessen Prototyp zu schaffen ist der eine Satz an den Konstruktor-Funktion.Und hier beginnt die Magie:
var Test1 = function() {};
Test1.prototype = {
doStuff: function() {}
};
var object1 = new Test1();
// This works!
object1.doStuff();
Wenn Sie eine Eigenschaft zuzugreifen, JavaScripts Runtimes inspizieren das Objekt, um herauszufinden, ob es eine Funktion ist doStuff
genannt, sonst sieht es für sie auf den Prototyp des Objekts, sonst sieht es auf der Prototyp des Prototyps und so weiter ...
Eigentlich new
Operator ist ein syntactic sugar. ECMA-Script 5 Object.create
eingeführt, die alles klar mehr macht:
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();
Wahrscheinlich sollten Sie diese anderen Q & A überprüfen: How does JavaScript .prototype work?
Nicht nur. Was ist mit 'Object.create': D –