在使用JavaScript构建对象时,出于某种需求要使用prototype(原型定义)设计,
不过这种设计当中有一个讨厌的事情就是Array污染,比如这样定义:
Array.prototype.foo='foo';
这是一个典型的Array污染,因为所有的Array对象都会继承foo这个成员。这对于习惯用
for (var in [])
这样语法的是个灾难,虽然有方法可以避免,但是这个问题的麻烦还有很多。
现在介绍一种无污染的设计方法:
function array(){};
array.prototype=[];
array.prototype.slice=function(){return this.length;}
var a=new array;
alert('array.slice():'+a.slice());
alert('Array.slice():'+[1,2,3].slice(1));
function object(){};
object.prototype={};
object.prototype.foo=function(){return this.name;}
var o=new object;
o.name='name from new object';
alert('object.foo():'+o.foo());
alert('{foo:"foo"}.foo:'+({foo:"foo"}).foo);
如果你的代码有一些特殊的需要,也许这个方法会有所帮助。
|