Heim >Web-Frontend >js-Tutorial >js-Erklärung für fortgeschrittene Kenntnisse
Dieser Artikel vermittelt Ihnen hauptsächlich das fortgeschrittene Wissen über js
Vererbung ist die Beziehung zwischen Typen;
Es handelt sich tatsächlich um eine Kopie des Objekts
function extend (parent, child) { for (var key in parent) { if (! child[key] ) { child[key] = parent[key] } }}
kann nur die Methoden im übergeordneten Element erben, und die Attributvererbung ist bedeutungslos
//父级元素function Person (name, age, sex) { this.name = name; this.age = age; this.sex = sex}Person.prototype.sayHi = function () { console.log('hello' + this.name);} //子级元素function Student (score) { this.score = score;} //只能继承方法Student.prototype = new Person;Student.prototype.constructor = Student;var s1 = new Student(100);console.log(s1);
Hinweis:
Problem: Der Parameter Student.prototype = new Person kann nicht auf den Konstruktor gesetzt werden, er kann nur einmal ausgeführt werden und der Wert kann nicht an das Attribut übergeben werden;
Use-Aufruf kann die Eigenschaften davon ändern und Konstruktoren ausleihen, aber keine Konstruktormethoden erben
//父级元素function Person (name, age, sex) { this.name = name; this.age = age; this.sex = sex}Person.prototype.sayHi = function () { console.log('hello' + this.name);} //子级元素function Student (name,age, sex, score) {Person.call(this, name, age, sex); this.score = score;} //只能继承属性var s1 = new Student('na', 20, 'nv' , 100);console.log(s1);
Kombiniert die beiden Situationen von Prototyp und Konstruktor: Es wird jedoch ein Problem geben. Auf die Methode eines untergeordneten Elements wird von mehreren untergeordneten Elementen zugegriffen.
So lösen Sie dieses Problem: Die Vererbung des Objekts wird verwendet. Kopieren;
function extend (parent, child) { for (var key in parent) { if (! child[key] ) { child[key] = parent[key] } }}function Person (name, age, sex) { this.name = name; this.age = age; this.sex = sex}Person.prototype.sayHi = function () { console.log('hello' + this.name); } //子级元素function Student (name,age, sex, score) {Person.call(this, name, age, sex); this.score = score;}Student.prototype.say = function () { console.log('hi'); } //只能继承属性extend(Person.prototype, Student.prototype);var s1 = new Student('na', 20, 'nv' , 100);console.log(s1); //子级元素function Teacher (name,age, sex,salary) {Person.call(this, name, age, sex); this.salary = salary}extend(Person.prototype, Teacher.prototype);var t = new Teacher('na', 10,'nv', 1000);console.log(t);
Funktion fn() {
}
2. Funktionsausdrucksformel
var fn = function (){
}
3.var fn = new Function('Der Parameter ist eine Zeichenfolge');
hier Auch wenn das Objekt von fn eine Funktion ist
4. Der Unterschied zwischen Funktionsdeklaration und Funktionsausdruck
Funktionsdeklaration wird gefördert und kann kann vorher und nachher aufgerufen werden, während der Funktionsausdruck nur nach dem Funktionsausdruck aufgerufen werden kann. Szenarien, in denen
später darauf angewendet wird
2. Dies zeigt in der normalen Funktion auf Fenster, im strikten Modus zeigt es auf undefiniert;
3. Dies zeigt im Timer auf Fenster
4 , es zeigt auf das Objekt der aufrufenden Methode
Ändern Sie den Punkt davon
Der erste Parameter zeigt auf das Element, auf das dieser zeigt
gibt eine neue Funktion zurück;
2.call
wird aufgerufen Funktion, ändern Sie den Punkt dieses
Konstruktor ausleihen
Ausleihen die Methode anderer Objekte
3.apply
Der erste Parameter ist der geänderte Punkt in, der zweite Parameter ist ein Array
Verwandte Empfehlungen:
JS fortgeschrittene verwandte KenntnisseDas obige ist der detaillierte Inhalt vonjs-Erklärung für fortgeschrittene Kenntnisse. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!