函数与对象和直接对象的区别

时间:2015-02-20 13:39:49

标签: javascript knockout.js kendo-grid

我在knockoutjs中为kendo网格编写了自定义绑定元素。我面对这个问题徘徊。任何人都可以告诉我差异statement 1statement 2

var newObj = { obj1 : 'One', obj2: 'Two', obj3: true, obj4: [ 'One','Two' ] }
//***Statement 1
return newObj; // By this statement am getting an error
//******
//****** Statement 2
var result = function(){ return newObj; }
return result; // By this statement program is working

// ******

3 个答案:

答案 0 :(得分:1)

调用代码需要一个返回对象的函数...

代码可以做很多聪明的事情来接受两者,但如果它有一个简单明了的界面则更简单。服从那个界面。

一个例子。

"有人给你一件新衬衫。"

你可以做聪明的想法,看看礼物是否包装在一个漂亮的礼品盒中,并采取适当的行动。 (1)如果礼物被包裹,则将其打开并佩戴。 (2)如果没有包裹就穿它。

要创建您正在使用的函数的接口(或传递回调,或者您在代码中使用的某些函数),他们选择不做聪明的事情(可能很难编程一些)然后是喜欢有人给你一件未包装的衬衫,但是你希望它被包裹起来,所以你只需将衬衫拆开试图打开它(但它没有被包裹)。

<强>要点:

  1. 阅读您正在使用的库的相关文档;
  2. 服从您正在使用的库的界面;

答案 1 :(得分:1)

如果你真的使用淘汰赛,因为你的标签建议......我会在黑暗中刺伤并说你可能正在寻找这样的东西:

请注意,newObj是一个可观察的,您可以使用newObj()访问该对象

&#13;
&#13;
    var model = function(){
      var newObj = ko.observable({ obj1 : 'One', obj2: 'Two', obj3: true, obj4: [ 'One','Two' ] })
      //***Statement 1
      
      function alertObj1(){
        //Notice i access object with () here. It is an observable is essentially a function.
        alert(newObj().obj1);
      }
      
      return {
        newObj: newObj,
        alertObj1: alertObj1 
      }
    }



    ko.applyBindings(model);
&#13;
    <script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<div data-bind="with: newObj">
    <div data-bind="text: obj1"></div>
    <div data-bind="text: obj2"></div>
    <div data-bind="text: obj3"></div>
    <h1>foreach</h1>
    <div data-bind="foreach: obj4">
      <div data-bind="text: $data"></div>
    </div>
</div>
<button data-bind="click: alertObj1" >Alert Prop Obj1</button>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

感谢您的回复。

实际上用户:Sxntk评论有助于以不同的方式思考它。通过小型研究我才知道kendo接受函数,该函数返回对象。

最后特别感谢Prusse和4imble。因为你们,我有两件新事物。您的所有解释都是正确的,但sxntk答案适合我的问题。