Назначение функции внутри объекта функции без вызова самой функции - PullRequest
3 голосов
/ 21 мая 2010

Я пытаюсь назначить функцию в свойстве объекта функции без фактического вызова самой функции.

например,

У меня есть следующее определение класса объекта функции

function objectOne(name, value, id){
    this.name=name;
    this.value=value;
    this.id=id;
    this.methodOne=methodFunction(this);
}

последняя строка this.methodOne=methodFunction(this); Я хочу передать текущий объект в функцию, но в то же время я не хочу выполнять функцию прямо сейчас.

Но если я сделаю это без скобки this.methodOne = methodFunction, то аргумент этого объекта не будет передан в качестве параметра функции.

Есть ли способ справиться с этим.

Заранее спасибо

Ответы [ 3 ]

3 голосов
/ 21 мая 2010

Эта страница помогла мне лучше понять эту концепцию. По сути, будет делать что-то вроде следующего.

function objectOne(name, value, id) {
  function methodFunction(value) {
     // do something
  }

  var that = this;

  this.methodOne = function() {
     methodFunction(that);
  };
}

var x = new objectOne("one", 2, 3);
x.methodOne();
2 голосов
/ 21 мая 2010

Вы могли бы сделать это так

function objectOne(name, value, id){
    this.name=name;
    this.value=value;
    this.id=id;
    this.methodOne=function() { methodFunction(this); };
}
1 голос
/ 21 мая 2010

Это то, для чего "карри". Либо используйте curry () из вашей любимой библиотеки JS, либо создайте свою собственную:

function curry (func, what_this) {
    var what_this = what_this || window;
    var args = [];
    for (var i=2, len = arguments.length; i < len; ++i) {
        args.push(arguments[i]);
    };
    return function() {
        func.apply(what_this, args);
    };
}

Тогда последняя строка вашего конструктора выглядит так:

this.methodOne=curry(methodFunction, undefined, this);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...