js圣杯模式
function inherit(Target, Origin) {
function F(){}
F.prototype = Origin.prototype;
Target.prototype = new F();
Target.prototype.constructor = Target;
}
下面还有另一种写法
var inherit = (function(){
var F = function(){};
return function(Target, Origin){
F.prototype = Origin.prototype;
Target.prototype = new F();
Target.prototype.constructor = Target;
}
} () );
让我们来看一张图片,来了解其原理
让我们来了解一下对象的创建过程和原型:
首先,什么是原型?
原型是function对象的一个属性。它定义了构造函数制造出的对象的公共祖先。通过该构造函数产生的对象,可以继承该原型的属性和方法。
对象的创建过程:var p = new Person(‘张三’, 20);
1. var p = {}; 初始化一个对象p
2. p.proto = Person.prototype; 设置p的原型指向Person.prototype
3. Person.call(p, ‘张三’, 20); 调用构造函数初始化p,并通过call或apply来改变this指向
constructor、prototype和__proto__
constructor属性:对象上的属性,这个属性对应创建所有指向该原型的实例的构造函数
prototype属性:函数上的属性,可以说只有函数才具有的属性。代表的是原型
__proto__属性:对象上的属性,无论是函数对象还是其他对象。指向的是它的原型