JavaScript创建对象的方法

显示在浏览器中的控制台中。

<script type="text/javascript">
//这个工厂方法返回一个新的"范围对象"
function range(from,to){
    //使用inherit()函数来创建对象,这个对象继承自在下面定义的原型对象
    //原型对象作为函数的一个存储,并定义所有“范围对象”所共享的方法(或者叫行为)
    //var r = inherit(range.methods);
    var r = Object.create(range.methods)  //r是一个继承自range.methods的对象
    //存储新的“范围对象”的起始位置和结束位置(状态)
    //这两个属性是不可继承的,每个对象都拥有唯一的属性
    r.from = from;
    r.to = to ;

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

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

    //对于范围内的每个证书都调用一次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,5);
console.log(r.includes(5));
r.foreach(console.log);
console.log(r);


//使用构造函数创建一个对象(常用)
//注意:这里并没有创建并返回一个对象,仅仅是初始化
function Range( from , to ){
    //存储“范围对象”的起始位置和结束位置(状态)
    //这两个属性是不可继承的,每个对象都拥有唯一的属性
    this.from     = from ;
    this.to     = to;
}

//所有的“范围对象”都继承自这个对象
//注意,属性的名字必须是 prototype  ********/
Range.prototype = {
    //如过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+")";
            },
}
//这里是使用“范围对象”的一些例子
console.log("使用构造函数创建一个对象(常用):");

var R = new Range(1,5);        //注意这个构造函数用关键字new来调用
console.log(R.includes(5));
R.foreach(console.log);
console.log(R);


</script>

 

posted @ 2017-05-27 20:20  newAdmin  阅读(170)  评论(0编辑  收藏  举报