Object.create()方法创建一个拥有指定原型和若干个指定属性的对象。
什么是prototype:
每个函数都有一个prototype属性,这个属性是指向一个对象的引用,这个对象称为原型对象,原型对象包含函数实例共享的方法和属性,也就是说将函数用作构造函数调用(使用new操作符调用)的时候,新创建的对象会从原型对象上继承属性和方法。
什么是apply和call
在 javascript 中,call 和 apply 都是为了改变某个函数运行时的上下文(context)而存在的,换句话说,就是为了改变函数体内部 this 的指向。JavaScript 的一大特点是,函数存在「定义时上下文」和「运行时上下文」以及「上下文是可以改变的」这样的概念。
对于 apply、call 二者而言,作用完全一样,只是接受参数的方式不太一样。
apply 、 call 、bind 三者都是用来改变函数的this对象的指向的;
apply 、 call 、bind 三者第一个参数都是this要指向的对象,也就是想指定的上下文;
apply 、 call 、bind 三者都可以利用后续参数传参;
bind 是返回对应函数,便于稍后调用;apply 、call 则是立即调用 。
例子:
function person(name){
this.name=name;
this.className="person"
}
person.prototype.getName=function(){
console.log(this.name)
}
function man(name){
person.apply(this,arguments)
}
man.prototype = Object.create(person.prototype);
var man1=new man("Davin");
console.log(man1.name); //Davin
console.log(man1.getName()); //Davin
//constructor 属性返回对创建此对象的数组函数的引用。
console.log(person.prototype.constructor); //function person(name){... }
console.log(man.prototype.constructor); //function person(name){... }
网友评论