JavaScript verfügt nicht über das Konzept von Klassen, aber fast alles basiert auf Objekten und kann auch Vererbung implementieren, das ist js Der größte Unterschied zu anderen OOP-Sprachen besteht darin, dass dies auch der am schwierigsten zu verstehende Teil von js ist. Lassen Sie mich im Folgenden über mein persönliches Verständnis sprechen.
Beginnen wir zunächst mit der Erstellung eines Objekts. Im Allgemeinen gibt es die folgenden Methoden:
1. Erstellen Sie eine Instanz von Objekt und fügen Sie es dann Eigenschaften und Methoden hinzu.
var person() = new Object(); person.name = 'mikej'; person.sayName = function(){ alert(this.name); }
2. Sie können auch so schreiben:
var parson = { name : 'mikej', sayName : function(){ alert(this.name); } }
3. Diese beiden Methoden zum Erstellen von Objekten sind sehr einfach, weisen jedoch Mängel auf Wenn Sie Objekte erstellen, wird viel doppelter Code generiert. Es gibt also Factory Pattern:
function createPerson(name){ var p = new Object(); p.name=name; p.sayName = function(){ alert(this.name); }; return p; } var p1 = createPerson('mikej'); var p2 = createPerson('tom');
Auf diese Weise können Sie unbegrenzt viele Objekte erstellen.
4. Es gibt eine andere Methode, die dem Factory-Muster ähnelt, das sogenannte Konstruktor--Muster:
function Person(name){ this.name=name this.sayName = function(){ alert(this.name); } this.say = function(){ alert('hi'); } } var p1 = new Person('mikej'); var p2 = new Person('tom');
Hier gibt es einige Dinge, die es zu beachten gilt : wird nicht angezeigt. Beim Erstellen eines Objekts wird für den Funktionsnamen Person der Großbuchstabe P verwendet (dies ist erforderlich. Sowohl p1 als auch p2 verfügen über ein Konstruktorattribut, das auf Person verweist. Gleichzeitig sind p1 und p2 sowohl Instanzen von Object als auch Instanzen von Person.
alert(p1.constructor == Person); //true alert(p1 instanceof Object); //true alert(p1 instanceof Person); //true
//5.11Update: Aus PHP-Perspektive war es einfach, sich den Prozess der Erstellung solcher Objekte als „Klasse“ vorzustellen und dann < zu verwenden 🎜>Diese Klasse instanziiert und die Parameter übergeben. Dies ist jedoch nicht der Fall. Der Erstellungsprozess sollte folgendermaßen aussehen: Erstellen Sie zunächst ein leeres Objekt und verwenden Sie dann die Apply-Methode. Der erste Parameter ist das leere Objekt und der zweite Parameter ist der Kontextparameter persönlich Es zeigt auf dieses Objekt, nämlich p1. new Person('mikej')
var p1 = new Person('mikej'); //上面代码就相当于 var p1 = {}; Person.apply(p1, ['mikej']);
alert(p1.say == p2.say) //false
function Person(name){ this.name = name; } //Person的原型对象 Person.Detaillierte Analyse von JavaScript-Prototypen und Prototypketten = { say: function(){ alert('hi'); }, sayName: function(){ alert(this.name); } }; var p1 = new Person("mikej"); var p2 = new Person("tom"); p1.sayName(); p2.sayName(); //下面就可以看出方法实现了共享 alert(P1.say == P2.say) //true alert(P1.sayName == P2.sayName) //true
function Person(name){ this.name = name; } Person.Detaillierte Analyse von JavaScript-Prototypen und Prototypketten = { say: function(){ alert('hi'); }, sayName: function(){ alert(this.name); } }; function Programmer(){ this.say = function(){ alert('im Programmer, my name is ' + this.name); } } Programmer.Detaillierte Analyse von JavaScript-Prototypen und Prototypketten = new Person('mikej'); //手动修正构造函数 Programmer.Detaillierte Analyse von JavaScript-Prototypen und Prototypketten.constructor = Programmer; var p1 = new Programmer(); console.dir(Programmer.Detaillierte Analyse von JavaScript-Prototypen und Prototypketten.constructor);//Programmer console.dir(p1.constructor);//Programmer console.dir(p1);
Programmer.Detaillierte Analyse von JavaScript-Prototypen und Prototypketten = new Person('mikej');
alert(Programmer.Detaillierte Analyse von JavaScript-Prototypen und Prototypketten.constructor == Programmer) //true alert(p1.constructor == Programmer) //true
zeigt Programmer.Detaillierte Analyse von JavaScript-Prototypen und Prototypketten = new Person('mikej');
Programmer.Detaillierte Analyse von JavaScript-Prototypen und Prototypketten.constructor = Programmer;
console.dir(p1);
Das obige ist der detaillierte Inhalt vonDetaillierte Analyse von JavaScript-Prototypen und Prototypketten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!