【问题标题】:What is the difference between JSON notation and assigning to an object?JSON 表示法和分配给对象有什么区别?
【发布时间】:2011-10-04 21:01:35
【问题描述】:

在 Knockoutjs 的 Twitter Client 示例中,一些属性位于 JSON 对象中,而其他属性则分配在 JSON 变量之外。有什么区别?为什么方法 (findSavedList) 不能只是初始声明的一部分?

var viewModel = {
    savedLists: ko.observableArray([ ... ]),
    editingList: { ...  },
    userNameToAdd : ko.observable(""),
    currentTweets : ko.observableArray([])
};

viewModel.findSavedList = function (name) {
   ...
};

【问题讨论】:

标签: javascript json knockout.js


【解决方案1】:

仅从问题中的代码来看,我看不出有任何理由不能这样写:

var viewModel = {
    savedLists: ko.observableArray([ ... ]),
    editingList: { ...  },
    userNameToAdd : ko.observable(""),
    currentTweets : ko.observableArray([]),
    findSavedList: function (name) {
       ...
    }
};

看看actual example,我想他们只是想单独编写函数——也许是为了可读性?

【讨论】:

    【解决方案2】:

    方法没有理由不能;很有风格。

    【讨论】:

      【解决方案3】:

      您引用的内容都不是 JSON。 JSON 是一种用于数据交换的文本表示法。你引用的是 JavaScript 代码。

      要回答您的问题,没有理由不能在对象字面量中定义该函数:

      var viewModel = {
          savedLists: ko.observableArray([ ... ]),
          editingList: { ...  },
          userNameToAdd : ko.observable(""),
          currentTweets : ko.observableArray([]),
          findSavedList: function(name) {
             ...
         }
      };
      

      为了清楚起见,作者可能已经将它们分解了。


      关于我上面的 JSON 评论:JSON 是 JavaScript 文字符号的子集。以上是直接的 JavaScript 文字符号。 JavaScript 代码中永远不需要 JSON;当您传递以文本形式编码的数据时,您只需要 JSON。如果它 意味着 JSON,它将是无效的。在 JSON 中,属性名称(键)必须用双引号括起来,并且您不能在属性初始化程序的右侧使用表达式(因此,不能调用 ko.observeableArray)。更多关于JSON site

      【讨论】:

      • 添加到您的 cmets:JSON 也不能包含函数。
      • @Matt:嗯,这些都是表达式。 :-) 但仍然值得一提。
      猜你喜欢
      • 1970-01-01
      • 2011-09-23
      • 2011-07-31
      • 2011-06-03
      • 2014-03-27
      • 2011-04-27
      相关资源
      最近更新 更多