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的这种基本用法来读取对象的属性。

                        

  • 相关阅读:
    023 AQS--JUC的核心
    022 Future接口
    021 Callable接口
    020 线程的综合考虑
    019 线程协作
    命令,lldb,llvm,gdb,gcc,
    @class,import,
    arc,自动引用计数,
    写在哪里,
    40岁生日,
  • 原文地址:https://www.cnblogs.com/hanxuming/p/5842024.html
Copyright © 2011-2022 走看看