此代码来自 this blog bost 上的 ryan niemeyer声明一个空函数(命名结果),然后向该函数添加属性:
ko.dirtyFlag = function(root, isInitiallyDirty) {
var result = function() {},
_initialState = ko.observable(ko.toJSON(root)),
_isInitiallyDirty = ko.observable(isInitiallyDirty);
result.isDirty = ko.computed(function() {
return _isInitiallyDirty() || _initialState() !== ko.toJSON(root);
});
result.reset = function() {
_initialState(ko.toJSON(root));
_isInitiallyDirty(false);
};
return result;
};
与简单地创建对象并在返回对象之前分配相同的属性相比,这有什么优势?
编辑
回应要求我希望它看起来如何的评论: 要么声明
var result={};
在声明中,或作为样式:
ko.dirtyFlag = function(root, isInitiallyDirty) {
var _initialState = ko.observable(ko.toJSON(root)),
_isInitiallyDirty = ko.observable(isInitiallyDirty);
return {
isDirty : ko.computed(function() {
return _isInitiallyDirty() || _initialState() !== ko.toJSON(root);
}),
reset : function() {
_initialState(ko.toJSON(root));
_isInitiallyDirty(false);
}
};
};
但语义无关紧要 - 返回函数的外壳向调用该函数的消费代码/开发人员提供了什么?
最佳答案
在您发布的链接中,作者声明
When ko.toJS runs, it will just see a plain function and ignore it.
换句话说,他正在使用这样一个事实,即他所使用的框架将忽略他正在使用它的上下文中的函数,而如果他使用了一个对象,框架将不会忽略它。
他从来没有打算调用该函数,只是将其用作存储他的脏标志的地方,同时欺骗淘汰框架忽略它。
关于javascript - 为什么声明空的javascript函数然后添加属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30504421/