js "类"概念的简单认识

来源:互联网 发布:excel数据下拉列表 编辑:程序博客网 时间:2024/04/29 17:18
在js中,类的实现是基于其原型继承机制的。如果2个实例都从同一个原型对象上继承了属性,我们说它们是同一个类的实例。
因此,原型对象是类的核心。
通常,类的实例还需要进一步初始化,通常是通过定义一个函数来创建并初始化这个新对象。
<script type="text/javascript">
  //实现一个能表示值的范围的类


  //这个工厂方法返回一个新的"范围对象"
  function range(from,to){
    //使用inherit()函数来创建对象,这个对象继承自在下面定义的原型对象
    //原型对象作为函数的一个属性存储,并定义所有"范围对象"所共享的方法
    var r = inherit(range.methods);


    //存储新的"范围对象"的起始位置和结束位置(状态)
    //这2个属性是不可继承的,每个对象都拥有唯一的属性
    r.from = from;
    r.to = to;


    //返回这个新创建的对象
    return r;
  }


  //原型对象定义方法,这些方法为每个范围对象所继承
  range.methods = {
    //如果x在范围内,则返回true,否则返回false
    //这个方法可以比较数字范围,也可以比较字符串和日期范围
    includes:function(x){
      return this.from<=x && x<=this.to;
    },


    //对于范围内的每个整数都调用一次f
    //这个方法只可用做数字范围
    foreach:function(f){
      for(var x=Math.ceil(this.from); x<=this.to; x++){
        f(x);
      };
    },
    //返回表示这个范围的字符串
    toString:function(){
      return "("+this.from+"..."+this.to+")";
    }
  };


  //这里是使用"范围对象"的一些例子
  var r = range(1,3); //创建一个范围对象
  r.includes(2); //true:2在这个范围内
  r.foreach(console.log); // 输出 1 2 3
  console.log(r); //输出 (1...3)
</script>


【类和构造函数】
调用构造函数的一种重要特征是,构造函数的prototype属性被用作新对象的原型。这意味着通过同一个构造函数创建的所有对象都继承自一个相同的对象,因此它们都是同一个类的成员。
原型对象是类的唯一标识:当且仅当2个对象继承自同一个原型对象时,它们才是属于同一个类的实例。
js中基于原型的继承机制是动态的:对象从其原型继承属性,如果创建对象之后原型的属性发生改变,也会影响到继承这个原型的所有实例对象。这意味着我们可以通过给原型对象添加新方法来扩充js类。
0 0
原创粉丝点击