zoukankan      html  css  js  c++  java
  • 《JS权威指南学习总结--9.1 类和模板》

    内容要点:

    一.JS类

        在JS中,类的所有实例对象都从同一个原型对象上继承属性。因此,原型对象是类的核心。在例6.1 原型中定义了inherit()函数(通过原型继承创建一个新对象),这个函数返回一个新创建的对象,后者继承自某个原型对象。

        如果定义一个原型对象,然后通过inherit()函数创建一个继承自它的对象,这样就定义了一个JS类。

        通常,类的实例还需要进一步的初始化,通常,是通过定义一个函数来创建并初始化这个新对象,参照下例9-1.例9-1给一个表示"值的范围"的类定义了原型对象,还定义了一个"工厂函数"用以创建并初始化类的实例。

    二.例9-1 一个简单的JS类

      //rang.js:实现了一个能表示值得范围的类

      //这个工厂方法返回一个新的 "范围对象"

        function range(from,to){

             //使用Inherit()函数来创建对象,这个对象继承自在下面定义的原型对象。

             //原型对象作为函数的一个属性存储,并定义所有"范围对象"所共享的方法(行为)

             var r = inherit(range.methods);

             //存储新的"范围对象"的起始位置和结束位置(状态)

             //这两个属性是不可继承的,每个对象都拥有唯一的属性

             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) 

         代码分析:

             在例9-1中有一些代码是没有用的。 这段代码定义了一个工厂方法range(),用来创建新的范围对象。

             我们注意到,这里给range()函数定义了一个属性range.methods,用以快捷地存放定义类的原型对象。把原型对象挂在函数上没什么大不了,但也不是惯用做法。

             再者,注意range()函数给每个范围对象都定义了from和to属性,用以定义范围的起始位置和结束位置,这两个属性是非共享的,当然也是不可继承的。

             最后,注意range.methods中定义的那些可共享、可继承的方法都用到了from和to属性,而且使用了this关键字,为了指代它们,二者使用this关键字来指代调用这个方法的对象。任何类的方法都可以通过this的这种基本用法来读取对象的属性。

                        

  • 相关阅读:
    (原)Lazarus 异构平台下多层架构思路、DataSet转换核心代码
    (学)新版动态表单研发,阶段成果3
    (学) 如何将 Oracle 序列 重置 清零 How to reset an Oracle sequence
    (学)XtraReport WebService Print 报错
    (原)三星 i6410 刷机 短信 无法 保存 解决 办法
    (原) Devexpress 汉化包 制作工具、测试程序
    linux下网络配置
    apache自带ab.exe小工具使用小结
    Yii::app()用法小结
    PDO使用小结
  • 原文地址:https://www.cnblogs.com/hanxuming/p/5842024.html
Copyright © 2011-2022 走看看