原型模式与原型链(js学习)

来源:互联网 发布:利用js实现动态时间 编辑:程序博客网 时间:2024/06/10 13:23

对象的原型(prototype):指向另一个对象,本对象的属性继承于他的原型对象。
原型对象这里写图片描述


原型模式

    我们创建的每一个函数都有一个prototype(原型)属性,这个属性是一个指针,指向一个对象。这个对象就是通过调用构造函数而创建的那个对象实例的原型对象。使用原型对象,就不必在构造函数中定义对象实例的信息,而是可以将这些信息直接添加到原型对象中。
function Person(){}Person.prototype.name="n";Person.prototype.age="18";var person1=new Person();

这里写图片描述
如图,我们创建的Person函数有一个prototype属性,该属性指向了Person函数的原型对象,原型对象里有一个construvtor属性指向当前函数,通过这个构造函数我们便可以为原型对象添加其他的属性和方法。


原型链

原型链的出现就是为了实现继承。利用原型让一个应用类型继承另一个应用类型的属性和方法。

function SuperType(){     this.property=true;}SuperType.prototype.getSuperValue=function(){            return this.property;      };function SubType(){   this.subproperty=false;}     SubType.prototype=new SuperType();//继承,这里SubType的原型指向了SuperType的原型对象Sub.prototype.getSubValue=function(){  return this.subproperty;};var instance=new SubType();alert(instance.getSuperValue());//true

    所有函数的默认原型都是Object的实例,因此,默认原型都会包含一个内部指针指向Object.prototype。    SubType继承SuperType,而SuperType继承了Object。当调用instance.toString时,实际上调用的是保存在Object.prototype中的那个方法。

两种方法来确定原型和实例之间的关系
1.instanceof操作符
2.isPrototypeOf()方法

alert(instance instanceof Object);//truealert(SuperType.portotype.isPrototypeOf(instance));//true

注意
1.重写父类中的方法一定要在添加新方法之前,因为重写之后会覆盖已有的链,这样新写的方法就被覆盖掉了。
2.差不多,就是在通过原型链实现继承时,不能使用对象字面量创建原型方法,这样做也会重写覆盖原型链。
SubType.prototype={
xxx:function(){ …};
wrong:function(){ …};
};


推荐博客:http://www.cnblogs.com/TomXu/archive/2012/01/05/2305453.html

0 0
原创粉丝点击