前两天稍微深入一点点理解了原型和原型链,然后就开始有挺多疑问的;
function dog() {
this.name = "huahua";
}
var cat = new dog();
console.log(cat.name); //huahua
按照原型链继承,cat是dog的实例,cat会继承dog的原型对象的属性才对,为什么cat.name又能继承dog的属性呢?
经过简单的百度,这个问题还是解决了的,我们需要分析一下构造函数实例化的过程是如何的:
1、创建一个空的cat对象;
2、cat.__proto__ = dog.prototype;
3、dog.call(cat);
4、return cat;
关键在于第三步,将dog的this指向了cat,因此cat.name为huahua;
说到这里顺便总结一下this的内容,共四种情况:
1、一般函数中this指向全局对象;
2、作为对象的方法时,函数内部的this指向该对象;
3、作为构造函数,this指向new的实例对象;
4、apply和call时,this指向参数对象;
javascript定义类的方法:http://www.ruanyifeng.com/blog/2012/07/three_ways_to_define_a_javascript_class.html;阮一峰