观<>之对类的支持总结

<<javascript框架设计>>之prototype及javascript中"类"的概念javascript

prototype 属性(对象)

为对象的类返回原型的引用。html

1.概念和总结java

   在javascript中全部函数均可以做为构造器,全部函数都会有prototype这个特殊的对象属性(便是一个对象又是函数对象的属性),好比:浏览器

  var baby=function(){框架

    var name="宝宝";//(等同于this.name="宝宝")函数

    var age=0;//(等同于this.age=0)this

    var getname=function(){return this.name;};//(等同于this.getname=function(){return  this.name;})spa

    function getage(){return this.age};//(等同于this.getage=function(){return this.age;})    prototype

  };设计

  baby.prototype={

    name1:"宝贝",

    getname1:function(){return this.name+'刚出生'}

  }

  var son=new baby();

  son.getname2=function(){return '儿子'};

baby即为构造器,son为实例;

使用new一个构造器(函数)来建立一个实例对象.

var child=new baby();

全部同一个构造器(baby)的实例对象(son,child)都会拥有该函数(baby)的prototype对象的全部成员(属性+方法),经过这种方式实现方法和属性的共享.

  在javascript中经过修改prototype对象来区别原生对象(内置对象+Arguments)及其余自定义'类'

  在浏览器中,Node类是基于Object修改而来,而Element则基于Node,HTMLElement是基于Element.......

  原型方法: 定义在prototype对象内的方法(getname1),为全部实例所共享

  原型属性: 定义在prototype对象内的属性(name1),为全部实例所共享

  特权方法: 直接定义(包括经过this引用建立,如this.getage)在构造器(函数)内的方法,也便是使用var定义的方法,私有

  特权属性: 直接定义(包括经过this引用建立,如this.age)在构造器(函数)内的属性,也便是使用var定义的属性,私有

          注意-- 经过this引用建立的特权方法或属性(优先访问)会屏蔽同名原型方法或属性,只要手动删除特权方法或属性就能够访问到原型方法或属性.(已验证) 

  类方法(类属性) : 在javascript中直接定义在函数上的方法,便是经过函数名引用自定义方法名并声明一个函数的方式实现的,该自定义方法即为类方法.形式: func.method = function(){},类方法不会被实例所访问.

  继承的实现 : 若是把函数A的prototype对象置换成函数B的原型(prototype),那么A的原型就获得了B的全部原型方法和原型属性.即便后来在B的prototype上添加的方法或属性,也是会被A的原型继承到.

  把一个函数的prototype赋给两个不一样的函数而又能保持这两个函数的prototype对象相对独立的两种办法:

  方法一(拷贝继承): 经过for in把父类的原型成员逐一赋给子类的原型

     方法二(原型继承): 先把父类的prototype赋给一个函数,而后将这个函数实例做为子类的原型

 实例回溯机制: 访问对象的一个属性时会先找其特权成员,若是存在就返回,不存在就去找原型,再没有就找父类的原型......
  constructor :每一个实例都有这个方法,指向其构造器.

  对象内部属性[[Prototype]]:保存着实例化的构造器所引用的prototype对象,对外提供了一个__proto__属性来访问它

  new操做时,

  (1) 建立一个空对象 instance

  (2) instance.__proto__ = instanceClass.prototype.

  (3) 将构造器函数里的 this = instance

  (4) 执行构造器里的代码

  (5) 断定是否有返回值,没有则返回undefined, 若是返回值为复合数据类型,直接返回, 不然返回 this

  注: js中主要的复合数据类型有object和Array,Array实际上是一种特殊数据类型,对于弱类型的js语言,Array有不少其余语言没有的特性。

          js复合型数据,参考自--http://www.cnblogs.com/roooc/archive/2012/09/12/2679041.html

相关文章
相关标签/搜索