JavaScript的構造函數的思考

使用TypeScript開發已經一段時間了,也把JavaScript遺忘在一邊了。今天回過頭來學習學習基礎,才發現本身是多麼的辣雞。javascript

好高騖遠,老是看而少動手敲和記錄下來。如此的學習方式,難以深刻發展。之後要多碼字才行,記錄在本身的有道雲筆記裏,亦或發表在這個平臺上。java

構造函數

咱們能夠使用構造函數能夠建立咱們須要的對象,下面記錄幾種方式,最主要的區別就在於方法的定義方式。函數

方式一:

function Person1() {
    this.name = `阿布`;
    this.age = 11;
    this.printInfo = function () {
        console.log(`this.name: ${this.name}, this.age: ${this.age}`);
    }
}

var per1 = new Person1();
var per2 = new Person1();
console.log(per1.printInfo === per2.printInfo); // false
複製代碼

方法直接定義到構造函數裏,這樣每聲明一個新對象,方法都是一樣的,但其地址確實不同的,浪費空間地址。學習

方式二

function Person2() {
    this.name = `阿紫`;
    this.age = 18;
    this.printInfo = printInfo;
}

function printInfo () {
    console.log(`this.name: ${this.name}, this.age: ${this.age}`);
}
複製代碼

定義了全局函數,污染了全局的命名空間。ui

方式三

function Person3() {
    this.name = `hello pretty`;
    this.age = 18;
}
Person3.prototype.printInfo = function (){
    console.log(`this.name: ${this.name}, this.age: ${this.age}`);
}
複製代碼

這種方式是比較好的。把方法定義到原型鏈上,每個新建的對象都能共用此方法。通常狀況下,咱們會把共享的方法或屬性定義到原型鏈上。this

相關文章
相關標籤/搜索