普通函式:
- 默認沒有回傳值
- this指向window
建構式
- 默認回傳這個物件
- this指向物件
- 使用this給物件系結屬性
- 默認回傳這個空物件
let Two = function () {
//空函式
//1.{}
//2.將建構式this--->{}
//3.使用this給空物件系結屬性 {}
//4.隱式回傳{}
}
原型鏈
話不多說 碼上去
這里寫了一個建構式,兩個屬性name和age,一個方法eat,使用this添加屬性和方法,
let One = function (name, age) {
this.name = name;
this.age = age
this.eat = function () {
console.log(this.name + '愛吃排骨,并且年齡' + this.age + '了,')
}
}
實體化One這個建構式,OneFunObj 這個實體化物件就擁有了One的屬性和方法,并賦值name=胡歌;age=18,還擁有eat這個方法,直接OneFunObj 這個物件點屬性或者方法就可以使用,

let OneFunObj = new One('胡歌', 18)
console.log(OneFunObj.name) //胡歌
console.log(OneFunObj.age) //18
OneFunObj.eat() //胡歌愛吃排骨,并且年齡18了,
我們發現OneFunObj 是個物件,這個對相還有個屬性__proto__,我們知道每一個物件都會默認有一個__proto__,我們隨便Let一個obj都會有一個__proto__屬性,
console.log(OneFunObj.__proto__, 'OneFunObj')
console.log(One.prototype, 'One')
console.log(OneFunObj.__proto__ === One.prototype)
不難發現,上面執行結果

驚奇的發現這個實體化物件OneFunObj它的__proto__正好是One這個建構式的prototype,它兩個是完全相等的,并且建構式的prototype中有屬性constructor所對應的正好的該建構式,
說明

實體物件.proto == 建構式.prototype == 原型物件
類
類本身也是建構式,也類似于建構式的語法糖,
它是ES6中新增的一個關鍵字(語法糖), 用于定義一個類的, 類似于ES5中的建構式, class中可以宣告建構式, 屬性和方法, 像一套模板, class的絕大部分功能,ES5 都可以做到,新的 class 寫法, 只是讓物件原型的寫法更加清晰、更像面向物件編程的語法而已,
基礎使用
class Person {
constructor() { // 建構式
this.name = ""; // 屬性
this.age = 0;
}
play () { // 方法 (會自動幫你添加到原型上)
console.log("我會玩");
}
}
let stu = new Person();
console.log(stu);
constructor
它是class定義類時, 使用的建構式(固定名稱), 當new 類()的時候, 建構式就會觸發. (起到一個初始化實體物件的作用)
有引數的構造方法 / 無引數的構造方法, 影響new 時傳值和建構式中使用,
Person的方法play會自動添加到stu的原型上,

class zjq {
constructor(name, age) {
this.name = name
this.age = age
}
eat() {
console.log(this.name + '今年' + this.age)
}
}
class xiaobai extends zjq { //xiaobai繼承zjq
constructor(name, age) {
super(name, age)
}
}
console.log(xiaobai.prototype.__proto__ == zjq.prototype) //true
let obj = new xiaobai('zjq', 18)
console.log(obj)
obj.eat() //zjq今年18
xiaobai繼承zjq,zjq的屬性方法會繼承到xiaobai的prototype上,obj這個實體物件就擁有了原型鏈上的方法,
他們的關系是

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/204930.html
標籤:其他
下一篇:python與以太坊智能合約互動
