new关键字的作用
通过new关键字实例化构造函数,获取对象
//定义一个构造函数
function person(name){
this.name = name;
this.say = function(){
console.log(this.name);
}
}
//给构造函数的原型设置属性和方法
person.prototype.age = '18';
person.prototype.sayYes = function(){
console.log('yyy');
}
//实例化构造函数
let p = new person('小明');
console.log(p);
// 当前属性
console.log(p.name)
// 当前方法
p.say()
console.log(p.color)
// 原型方法
p.sayBye()
通过new关键字实例化的对象p,具备了构造函数person中this的属性:name,也具备了构造函数person的原型prototype的属性age和方法sayYes。
实现过程
- 1 .创建一个空对象,并且this变量引用该对象,同时还继承了该函数的原型。
var obj = {};
- 2 .原型的属性和方法被加入到this引用的对象中。原型的执行,确定对象obj的原型链。
obj.__proto__ = person.prototype;
- 3 .新创建的对象由this所引用,并且最后隐士的返回this。绑定this对象为obj,传入参数;执行person构造函数,进行属性和方法的赋值操作。
person.call(o,'小明');
- 4 .返回结果。
注意:在通过该种方式获取对象时,最终不一定返回的是对象o,要看构造函数的返回值是什么。
如果函数返回的是基本类型值,实际会生成一个对象,返回o
如果是函数返回的是引用类型值,则实际返回的是该引用类型值