JS的new操做符

1、new的使用

當咱們定義一個構造函數,用new建立對象時app

function Person(){
}

var person = new Person();

console.log(person); // Person{}

會返回一個指向該構造函數原型的對象。函數

2、new建立對象的過程

根據紅寶書的描述分爲如下4個步驟:測試

  1. 建立一個新的對象;
  2. 將構造函數的函數做用域賦給新對象(所以this就指向了這個新對象);
  3. 執行構造函數中的代碼(爲這個新對象添加屬性);
  4. 返回新對象。

3、模擬實現new操做

// newObj接受不定量的參數,第一個參數是一個構造函數
function newObj(fn, ...arg) {
    // 1.新建一個空對象
    var obj = {};
    // 2.將新對象的原型指向構造函數的原型
    obj.__proto__ = fn.prototype;
    // 3.將 fn 的 this 指向 obj
    fn.apply(obj, arg);
    // 4.返回新對象
    return obj;
}

或
function newObj(fn, ...arg) {
    let obj = Object.create(fn.prototype);
    fn.apply(obj, arg);
    return obj;
}

接下來對newObj函數進行測試this

function Person(firstName, lastName) {
    this.firstName = firstName;
    this.lastName = lastName;
}

// 在Person的原型上添加sayName()方法
Person.prototype.sayName = function() {
    alert(this.firstName + " " + this.lastName);
}

// 使用自定義的newObj建立Person的對象實例
var pitt = newObj(Person, "Bob", "Pitt");
// 調用sayName()
pitt.sayName(); // "Bob Pitt"

//使用new操做符建立實例對象
var sunny = new Person("Bob", "Sunny");
sunny.sayName(); // "Bob Sunny"
相關文章
相關標籤/搜索