一个对象,你可以改变它的construct函数,但是无法改变它的_proto_对象
IE中是没有_proto_这个属性的
this指向是运行时决定的
js中的call函数,第一个参数输入this指向的函数,第二个函数输入实参
call 与 apply用法相同,参数传输的参数不同
log.cal(obj,"name","age");
log.apply(obj,["name","age"]);
原型和原型链是JS实现继承的一种模型
原型链的形成是真正是靠proto 而非prototype
原型对象 prototype 在JavaScript 中,每当定义一个对象(函数)时候,对象中都会包含一些预定义的属性。其中函数对象的一个属性就是原型对象 prototype。注:普通对象没有prototype,但有proto属性
原型链 proto JS在创建对象(不论是普通对象还是函数对象)的时候,都有一个叫做proto的内置属性,用于指向创建它的函数对象的原型对象prototype
要深入理解这句话,我们再举个例子,看看前面你真的理解了吗?
var animal = function(){};
var dog = function(){};
animal.price = 2000;//
dog.prototype = animal;
var tidy = new dog();
console.log(dog.price) //undefined
console.log(tidy.price) // 2000
Object.create(proto [, propertiesObject ]) 是E5中提出的一种新的对象创建方式,第一个参数是要继承的原型,如果不是一个子函数,可以传一个null,第二个参数是对象的属性描述符,这个参数是可选的。 object.create帮我们实现了继承,但是没有帮我们把原型对象恢复过来