别把我也引来。不知道这样能不能看明白。 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;
既然是已经实例好的对象,那prototype(也就是所谓的共享)有什么意义。
f.prototype = x; 我一开始还以为这个是复制的,
所以是共享的。
你那个地方是叫你这样用的:
var a = range(1,3);
var b = range(2,5);
var c = range(0,7);
也许,你说的效果,叫做闭包。
在javascript里面追求OO的全特性是很蛋疼的。
而且那样也失去了乐趣。
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;