Angular.extend评估无参数函数

时间:2013-12-20 17:27:41

标签: javascript jquery angularjs

所以我有这个奇怪的问题,其中angular.extend正在评估我的无参数函数。我的userData工厂已从我的applicationUserData扩展,但最终结果是我的userData工厂中的userData对象具有needsTrainingshowWelcomeText的实际值,而不是它们是函数。 setUserData(appbaseUserData)函数仍显示为函数。知道为什么会这样吗?

application.factory('applicationUserData', [function(){
    var userData;
    return {
        setUserData: function(appbaseUserData){
            userData = appbaseUserData;
        },
        needsTraining: function(){
            userData.ensureUserDataInitialized();
            return userData.needsTraining;
        },
        showWelcomeText: function(){
            userData.ensureUserDataInitialized();
            return userData.showWelcomeText;
        }
    }
}]);

appBaseModule.factory("userData", ["applicationUserData", function(applicationUserData) {
    var userData = {},
        userDataInitialized = false;

    userData.init = function(data) {
        applicationUserData.setUserData(userData);
        angular.extend(userData, applicationUserData, data);
        userDataInitialized = true;
    };
....
    return userData;
}]);

1 个答案:

答案 0 :(得分:1)

这可能不是extend

Here is the source for that method in GitHub

function extend(dst) {
  var h = dst.$$hashKey;
  forEach(arguments, function(obj){
    if (obj !== dst) {
      forEach(obj, function(value, key){
        dst[key] = value;
      });
    }
  });

  setHashKey(dst,h);
  return dst;
}

当你打电话给data时有什么问题?它有可能会覆盖你的功能。

无论哪种方式,它本身都不是extend。这是一个非常简单的功能。