1. 程式人生 > 實用技巧 >5600. 第 K 條最小指令 組合數學

5600. 第 K 條最小指令 組合數學

// 原型鏈
1.### 建構函式原型prototype建構函式通過原型分配的函式是所有物件所共享的。
JavaScript 規定,每一個建構函式都有一個prototype 屬性,指向另一個物件。注意這個prototype就是一個物件,
這個物件的所有屬性和方法,都會被建構函式所擁有。
我們可以把那些不變的方法,直接定義在 prototype 物件上,這樣所有物件的例項就可以共享這些方法。

2.物件都會有一個屬性 proto 指向建構函式的 prototype 原型物件,之所以我們物件可以使用建構函式 prototype
原型物件的屬性和方法,就是因為物件有 proto 原型的存在。

3.物件原型( proto

)和建構函式(prototype)原型物件裡面都有一個屬性 constructor 屬性 ,constructor 我們稱為建構函式,
因為它指回建構函式本身。
constructor 主要用於記錄該物件引用於哪個建構函式,它可以讓原型物件重新指向原來的建構函式。

// 4.繼承
// A.call()可以呼叫函式

  • call()可以修改this的指向,使用call()的時候 引數一是修改後的this指向,引數2,引數3..使用逗號隔開連線
    function fn(x, y) {
    console.log(this);
    console.log(x + y);
    }
    var o = {
    name: 'andy'
    };
    fn.call(o, 1, 2);//呼叫了函式此時的this指向了物件o

// B.子建構函式繼承父建構函式中的屬性
先定義一個父建構函式
再定義一個子建構函式
子建構函式繼承父建構函式的屬性(使用call方法)
// 1. 父建構函式
function Father(uname, age) {
// this 指向父建構函式的物件例項
this.uname = uname;
this.age = age;
}
// 2 .子建構函式
function Son(uname, age, score) {
// this 指向子建構函式的物件例項
// 3.使用call方式實現子繼承父的屬性
Father.call(this, uname, age); //呼叫father函式,指向son,使son實現繼承使用父級的屬性和方法
this.score = score;
}
var son = new Son('劉德華', 18, 100);
console.log(son);

// C.借用原型物件繼承方法
先定義一個父建構函式
再定義一個子建構函式
子建構函式繼承父建構函式的屬性(使用call方法)
// 1. 父建構函式
function Father(uname, age) {
// this 指向父建構函式的物件例項
this.uname = uname;
this.age = age;
}
Father.prototype.money = function() {
console.log(100000);
};
// 2 .子建構函式
function Son(uname, age, score) {
// this 指向子建構函式的物件例項
Father.call(this, uname, age);
this.score = score;
}
// Son.prototype = Father.prototype; 這樣直接賦值會有問題,如果修改了子原型物件,父原型物件也會跟著一起變化
Son.prototype = new Father();
// 如果利用物件的形式修改了原型物件,別忘了利用constructor 指回原來的建構函式
Son.prototype.constructor = Son;
// 這個是子建構函式專門的方法
Son.prototype.exam = function() {
console.log('孩子要考試');
}
var son = new Son('劉德華', 18, 100);
console.log(son);

// D.類的繼承
// 父類
class Father{
}
// 子類繼承父類
class Son extends Father {
}

class Father {
    constructor(surname) {
      this.surname= surname;
    }
    say() {
      console.log('你的姓是' + this.surname);
     }
}
class Son extends Father{  // 這樣子類就繼承了父類的屬性和方法
}
var damao= new Son('劉');
damao.say();      //結果為 你的姓是劉

//子類使用super關鍵字訪問父類的方法
//定義了父類
class Father {
   constructor(x, y) {
   this.x = x;
   this.y = y;
   }
   sum() {
   console.log(this.x + this.y);
	}
 }
//子元素繼承父類
    class Son extends Father {
        //子類如果使用constructor建構函式,必須新增super()關鍵字,呼叫父類建構函式
   		 constructor(x, y) {
    		super(x, y); //使用super呼叫了父類中的建構函式
    	}
    }
    var son = new Son(1, 2);
    son.sum(); //結果為3