1.首先在new一个实例时,做了什么?如下所示
1.访问了构造函数的属性,name,age
2.访问原型链的属性,say()
function Person(name,age){
this.name = name;
this.age = age;
return 1
}
Person.prototype.say = function(){
console.log("hello")
}
var p = new Person("zhao",18)
console.log(p.name)//zhao
console.log(p.age)//18
p.say()//hello
2.提出两个问题:
2.1如何让实例对象拥有父类构造函数的属性?
联想到构造函数的继承
function Person(){
this.color= ["bule","green","red"];
this.say = function (){
console.log("nihao")
}
};
function Stu(){
Person.call(this)
}
2.2如何让实例对象拥有父类原型链的属性?
通过原型链来访问,即实例的__proto__指向构造函数的prototype
具体实现如下:
function myNew(father,...args){
//1.实现原型链的指向
var obj = Object.create(father.prototype)
//2.实现构造函数中属性的访问
var res = father.call(obj,...args)
return typeof(res) == "object"? res:obj
}