ホームページ  >  記事  >  ウェブフロントエンド  >  jsの高度な知識解説

jsの高度な知識解説

小云云
小云云オリジナル
2018-03-29 17:10:462373ブラウズ

この記事では主に 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);

Prototype +constructor

は、プロトタイプとコンストラクターを組み合わせます。問題は、子要素のメソッドが複数の子要素からアクセスされることです

この問題を解決するには、オブジェクトの継承、つまりコピーを使用します。

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. 関数宣言

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。