我错误地认为.prototype
应该做什么,或者这只是不起作用?
window.dump = function () {
for (var i = 0, x = dump.list.length; i < x; ++i) console.log.apply(this, dump.list[i]);
if (arguments.length && typeof arguments[0] === 'boolean' && arguments[0]) dump.purge();
}
dump.prototype = {
list : [],
log : function () {
dump.list.push(arguments);
},
purge : function () {
dump.list = [];
}
}
dump.log('test1');
dump.log('test2');
dump();
我希望“test1”和“test2”通过console.log
,而dump.log
未定义。但是dump.prototype.log
是。
编辑:我已经尝试了以下内容,而我似乎无法正确使用这个原型。
window.dump = new function () {
this.list = [];
this.log = function () {
this.list.push(arguments);
}
this.purge = function () {
return this.list = [];
}
return function () {
for (var i = 0, x = this.list.length; i < x; ++i) console.log.apply(this, this.list[i]);
if (arguments.length && typeof arguments[0] === 'boolean' && arguments[0]) this.purge();
}
}
我想我要问的是,能够如下使用我的代码的正确方法是什么?
dump.log('test1');
dump.log('test2');
dump();
编辑:感谢Matthew Flaschen的最终结果,感谢任何有兴趣从中构建的人。
(function () {
var console_log = Function.prototype.bind.call(console.log, console);
window.dump = function () {
for (var i = 0, x = dump.list.length; i < x; ++i) console_log.apply(this, dump.list[i]);
if (arguments.length && typeof arguments[0] === 'boolean' && arguments[0]) dump.purge();
};
dump.list = [];
dump.log = function () {
dump.list.push(arguments);
}
dump.purge = function () {
dump.list = [];
}
})();
我必须指定console_log
来换取console.log
,因为显然console
不是标准对象。因此,它不是具有Function
方法的标准apply
对象。证明我确实使用了Google。
答案 0 :(得分:6)
是的,正确的版本如下。 dumper
是构造函数。因此,它初始化list
成员。
下面,我们使用所需的方法设置dumper
原型。这些也可以使用this
。 dumper
的任何实例(例如d
)都将使用这些方法。
window.dumper = function () {
this.list = [];
};
dumper.prototype = {
log : function () {
this.list.push(arguments);
},
purge : function () {
this.list = [];
},
dump : function () {
for (var i = 0, x = this.list.length; i < x; ++i) console.log.apply(this, this.list[i]);
if (arguments.length && typeof arguments[0] === 'boolean' && arguments[0]) this.purge();
}
}
var d = new dumper();
d.log('test1');
d.log('test2');
d.dump();