この記事では主に js の高度な知識を共有します
継承は型間の関係です
実際にはオブジェクトのコピーです
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 (score) { this.score = score;} //只能继承方法Student.prototype = new Person;Student.prototype.constructor = Student;var s1 = new Student(100);console.log(s1);
注:
問題: Student.prototype = new Person パラメーターをコンストラクターに設定できず、実行できるのは 1 回のみで、値を設定することはできません。属性に渡される;
は、呼び出しを使用して this のプロパティを変更でき、コンストラクターを借用できますが、コンストラクター メソッドを継承することはできません
//父级元素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);
は、プロトタイプとコンストラクターを組み合わせます。問題は、子要素のメソッドが複数の子要素からアクセスされることです
この問題を解決するには、オブジェクトの継承、つまりコピーを使用します。
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);
function fn() {
}
2. 関数式
var fn = function (){
}
3.var fn = new Function('パラメータは文字列です' );
fn here オブジェクトが関数であっても
4. 関数宣言と関数式の違い
関数宣言は昇格されて前後で呼び出すことができますが、関数式は関数式の後にのみ呼び出すことができます。
このシナリオに適用します
1. コンストラクター内の This は、呼び出し元のオブジェクト を指します。2. 厳密モードの This は、タイマーを指します。オブジェクト メソッドが呼び出されるとき、this は
のポイントを変更します。最初のパラメータは、this が指す要素を指します。
新しい関数を返します。 2.call は関数を呼び出し、この Point を変更します コンストラクターを借用します 他のオブジェクトのメソッドを借用します 3.apply 最初のパラメータが変更された this のポイントです。 2 番目のパラメーターは配列です。関連する推奨事項:JS の高度な関連知識
以上がjsの高度な知識解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。