// 举例
function Person(name,age){
this.name = name;
this.age = age;
}
var obj = new Person('小明',3) // Person {name: '小明', age: 3}
1、创建一个新的空对象。(即实例对象)
var obj = {};
2、设置原型链
构造函数的原型被其所有实例对象共享
obj.__proto__= Person.prototype
3、将构造函数的this指向新实例obj,并执行函数
var result = Person.call(obj,'小明',3);
4、如果构造函数没有返回一个对象类型的值,返回这个新对象obj,否则返回那个对象类型值
if(typeof(result) == 'object'){
return result;
}else{
return obj
}
手动实现new
function Person(name,age){
this.name = name;
this.age = age;
}
Person.prototype.sayAge = function(){
console.log(this.age);
}
function myNew(){
var obj = {};
Constructor = [].shift.call(arguments);
obj.__proto__ = Constructor.prototype;
var result = Constructor.apply(obj, arguments);
return typeof result == 'object'? result:obj;
}
var s = myNew(Person,'小明',3);
console.log(s.name) //小明
console.log(s.sayAge()) //3
new三角原型图