當咱們定義一個構造函數,用new建立對象時app
function Person(){ } var person = new Person(); console.log(person); // Person{}
會返回一個指向該構造函數原型的對象。函數
根據紅寶書的描述分爲如下4個步驟:測試
// 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"