原型链图解:
原型Prototype概述
JavaScript
通过构造函数生成新对象,因此构造函数可以视为对象的模板。实例对象的属性和方法, 可以定义在构造函数内部。
构造函数优点是:构造函数创建的属性和方法可以在实例之间共享
缺点是:如果实例之间有相同的方法,这个方法都会创建一遍,这样会造成系统资源的浪费
解决方法:
function Cat(name, color) {
this.name = name;
this.color = color;
this.meow = function () {
console.log('喵喵');
};
}
var cat1 = new Cat('大毛', '白色');
var cat2 = new Cat('二毛', '黑色');
cat1.meow === cat2.meow// false
这就是JavaScript的原型对象(prototype)
prototype的使用
JavaScript继承机制的设计思想就是:原型对象的所有属性和方法,都能被实例对象共享
JavaScript规定,每个函数都有一个prototype属性,指向一个对象
对普通函数来说,这个属性没有效果,对于构造函数来说,生成实例会自动成为实例对象的原型
constructor属性
prototype对象(原型对象)有一个constructor属性,默认指向prototype对象所在的构造函数。
由于constructor属性定义在prototype对象上面,意味着可以被所有实例对象继承。
constructor属性的作用是,可以得知某个实例对象,到底是哪一个构造函数产生的。
__proto__属性
__proto__
属性是每一个对象以及函数都隐含的一个属性。
__proto__
属性指向的是创建他的构造
函数的
prototype
。原型链就是通过这个属性构件的。
原型也是一个对象,既然是对象就会有 __proto__ 属性,该属性指向原型对象的原型。
原型链
总结
在JavaScript里,万物皆对象
所有的函数都是function的实例,
最后都会指向Object.prototype的原型对象