var m = inherit(r); 
alert(m.xx);//error
不会错误呀,你什么测试环境呀?

解决方案 »

  1.   

    代码是没有问题的,m的from、to、xx属性都有。
      

  2.   

    都是书上的吗?我看着不舒服。var r = range(1,3); 出来竟是个已经  实例化的对象(instance object);
    既然是已经实例好的对象,那prototype(也就是所谓的共享)有什么意义。
      

  3.   

    想清楚了
    f.prototype = x;    我一开始还以为这个是复制的,
    所以是共享的。
    你那个地方是叫你这样用的:
    var a = range(1,3);  
    var b = range(2,5); 
    var c = range(0,7); 
      

  4.   


    也许,你说的效果,叫做闭包。
    在javascript里面追求OO的全特性是很蛋疼的。
    而且那样也失去了乐趣。
      

  5.   

    别把我也引来。不知道这样能不能看明白。
    function inherit(x){
    var p = typeof x;
    if( p !=='object'&& p!== 'function') {alert('error');throw TypeError};
    function f(){};
    f.prototype = x;
    return  f;
    }
    function range(from, to) {
        var r = inherit(range.methods); 
        
        return r;
    }
    range.methods = {
    xx:'111',       //这个属性为什么也不能继承
        includes: function(x) { return this.from <= x && x <= this.to; },
        foreach: function(f) {
            for(var x = Math.ceil(this.from); x <= this.to; x++) f(x);
        },
        toString: function() { return "(" + this.from + "..." + this.to + ")"; }
    };
    var $a = new range();
    $a.from = 3;
    $a.to = 6;var $b = new range();
    $b.from=0;
    $b.to = 7;