Ссылка на свойства объекта в Javascript - PullRequest
4 голосов
/ 29 августа 2011

Если у меня есть код:

function RandomObjectThatIsntNamedObjectWhichIOriginallyNamedObjectOnAccident() {
    this.foo = 0;
    this.bar = function () {
        this.naba = function () {
            //How do I reference foo here?
        }
    }
}

Ответы [ 5 ]

11 голосов
/ 29 августа 2011

Вам нужна self ссылка:

function RandomObjectThatIsntNamedObjectWhichIOriginallyNamedObjectOnAccident() {
    var self = this;
    this.foo = 0;
    this.bar = function () {
        this.naba = function () {
            self.foo; //foo!
        }
    }
}
6 голосов
/ 29 августа 2011
function SomeObject() {
    var self = this;
    this.foo = 0;
    this.bar = function () {
        this.naba = function () {
            self.foo;
        }
    }
}
3 голосов
/ 29 августа 2011

Попробуйте следующее

function SomeObject() {
    var self = this;
    this.foo = 0;
    this.bar = function () {
        this.naba = function () {
            //How do I reference foo here?
            self.foo
        }
    }
}
1 голос
/ 29 августа 2011

Во-первых: не называйте вашу функцию Object, она затеняет глобальный Object конструктор.

Я не вижу причины, по которой вы должны присвоить naba внутри bar экземпляру. Почему вы это делаете? Вы можете назначить bar и naba прототипу функций:

function MyConstructor() {
    this.foo = 0;
}

MyConstructor.prototype.bar = function () {

};

MyConstructor.prototype.naba = function () {
    // this.foo
};

В конечном итоге это зависит от того, как вы вызываете функцию naba. Тот факт, что вы присваиваете его this, предполагает, что вы хотите вызвать его с

var obj = new MyConstructor();
obj.naba();

Если вы хотите добавить naba только после вызова bar, вы все равно можете получить доступ к foo через this.foo:

MyConstructor.prototype.bar = function () {
    if(!this.naba) {
        this.naba = function() {
            // this.foo
        };
    }
};

var obj = new MyConstructor();
obj.bar();
obj.naba();

Если вы хотите получить правильный / лучший ответ, вы должны показать, как вы собираетесь использовать naba.

0 голосов
/ 30 августа 2011

Интересно, что вам не нужно делать ничего особенного.

Справочник this работает:

function SomeObject() {
  this.foo = 0;
  this.bar = function () {
    this.naba = function () {
      alert(this.foo); // this works!
    }
  }
}

Поскольку вы присваиваете "методы" всегда одной и той же ссылке, this все равно будет указывать на нее внутри bar, а затем внутри naba.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...