Maison > Article > interface Web > js explication des connaissances avancées
Cet article partage principalement avec vous les connaissances avancées de js
L'héritage est la relation entre les types
Il s'agit en fait d'une copie de l'objet
function extend (parent, child) { for (var key in parent) { if (! child[key] ) { child[key] = parent[key] } }}
ne peut hériter que des méthodes de l'élément parent, et l'héritage d'attribut n'a aucun sens
//父级元素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);
Remarque :
Problème : Le paramètre Student.prototype = new Person ne peut pas être défini sur le constructeur, et il ne peut être exécuté qu'une seule fois, et la valeur ne peut pas être transmise à l'attribut ;
Utiliser l'appel peut modifier les propriétés de celui-ci et peut emprunter des constructeurs, mais ne peut pas hériter des méthodes du constructeur
//父级元素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);
Combine les deux ; situations de prototype et de constructeur : Mais il y aura un problème, la méthode d'un élément enfant sera accessible par plusieurs éléments enfants
Comment résoudre ce problème, l'héritage de l'objet est utilisé, c'est-à-dire ; copie ;
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);
1. Déclaration de fonction
fonction fn() {
>
2. Formule d'expression de fonction
var fn = function (){
}
3.var fn = new Function('Le paramètre est une chaîne');
ici Même si l'objet de fn est une fonction
4. La différence entre la déclaration de fonction et l'expression de fonction
la déclaration de fonction sera promue et pourra être appelé avant et après, tandis que l'expression de fonction ne peut être appelée qu'après l'expression de fonction Scénarios où
1 Ceci dans le constructeur pointe vers l'objet appelant
<.>2. Ceci dans la fonction ordinaire pointe vers window, en mode strict, il pointe vers undefined ;3. Ceci dans le timer pointe vers windowQuand la méthode objet appelle ceci. , il pointe vers l'objet de la méthode appelante Changer le point de ceci 1.bind :Le premier paramètre pointe vers l'élément vers lequel this pointe ; 🎜>renvoie une nouvelle fonction ;
2.call
sera appelé Function, changez le point de ce
Constructeur d'emprunt
Emprunter la méthode des autres objets
3.apply
Le premier paramètre est celui modifié par ce point, le deuxième paramètre est un tableau
Recommandations associées :
Connaissances avancées associées à JSCe qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!