当咱们定义一个构造函数,用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"