【发布时间】:2014-12-04 17:51:41
【问题描述】:
我昨天开始阅读 stampit js 的源代码,发现了一个有趣的方法,通过调用 apply() 将函数变量包含在对象中
instance = fn.apply(instance, arguments) || instance;
这到底是如何工作的? 为什么下面的代码行不起作用?
instance = fn.apply(instance, arguments);
一个更长的例子:
var createFoo = function() {
var foo = {},
fn = function() {
var i = 0;
this.increment = function() {
i++;
};
this.get = function() {
return i;
};
};
foo = fn.apply(foo, arguments) || foo;
return foo;
}, foo = createFoo();
test('foo test', function () {
foo.increment();
equal(foo.get(), 1, 'pass');
});
var createBar = function() {
var bar = {},
fn = function() {
var i = 0;
this.increment = function() {
i++;
};
this.get = function() {
return i;
};
};
bar = fn.apply(bar, arguments);
return bar;
}, bar = createBar();
test('bar tests', function () {
bar.increment(); /* undefined */
});
【问题讨论】:
-
您在顶部发布的 2 行有什么不同?
-
当你有
a || b时,这将评估a,如果它是“真实的”则返回它,否则它会返回b。 -
对不起火箭危险品,这是一个错字。现在改了。
标签: javascript function object private stampit.js