javascript - 为什么声明空的javascript函数然后添加属性

标签 javascript

此代码来自 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/

相关文章:

javascript - jQuery Bootstrap Carousel 根据当前幻灯片显示内容

javascript - 使用 jQuery 计算数组中的对象以更改进度条

javascript - 美化json字符串vuejs2 webpack

javascript - 对js对象进行排序

javascript - 用 var 重新声明对象

javascript - 如何获取Webview中显示内容的HTML

javascript - 当我刷新页面时,它会将我重定向到登录页面

javascript 复选框功能仅工作一次

javascript - Ember 数据 createRecord 不起作用 : "TypeError: undefined is not a function"

javascript - 如何在 div 内的输入元素外部单击?