0

尝试使用同名的方法和属性:

作为用于访问值的属性:if (myObject.propMethod() == queryVal) 一个方法,用于分配给propMethod:myObject.propMethod(newVal)

我已经定义了以下内容:

        // the property: 
        myObject.propMethod = ko.observable();   // disregard the knockout 'ko' for this question  
        // the method: 
        myObject.prototype.propMethod = function (value) {
            myObject.propMethod = value;
            return target; // supports chaining
        };

缺乏经验和接触 javascript:它似乎正在工作,但我想验证是否有一些我没有考虑到的东西。

编辑:根据下面的评论,看来我的任务实际上调用了淘汰赛的功能,所以我的“原型”永远不会执行。如何获得允许我在分配时执行附加逻辑的结构?

4

2 回答 2

1

您不需要单独的属性和方法来为属性赋值。

直接分配给它。

        // the property: 
    myObject.propMethod = ko.observable(); 
    // the method: 
    myObject.propMethod = value;

在这种情况下,Knockout 必须使其可观察(对于双向绑定。每当您更改值时更新。)由于敲除使其成为一种观察方法,您必须通过在属性名称后面加上 () 来读取敲除可观察属性。

于 2013-09-23T14:09:18.603 回答
0

一个 Knockoutobservable 它所属的 ViewModel 的一个方法;它是一个 getter/setter,因此您可以完全按照您在第二段中描述的方式使用它。你不需要做任何特别的事情来启用这个行为;它是内置的。

如果您试图独立于 Knockout 来实现此效果,只需创建一个 getter/setter 工厂函数:

function getterSetter(initVal) {
  var myValue=initVal; //Closures are cool!
  return function(val) {
    if (typeof val !== 'undefined') {
      myValue = val;
    }
    return myValue;
  }
}

接着

var myObject = {};
myObject.propMethod = getterSetter();
myObject.anotherPropMethod = getterSetter('hello');
...
myObject.propMethod('world');
alert(myObject.anotherPropMethod()+' '+myObject.propMethod();
myObject.anotherPropMethod('goodbye');
alert(myObject.anotherPropMethod()+' '+myObject.propMethod();
于 2013-09-24T14:26:26.653 回答