свойства методов javascript - PullRequest
       0

свойства методов javascript

0 голосов
/ 24 декабря 2011

Возможно ли в javascript установить свойства внутри методов?

Например,

function Main() {

   this.method = function() {
      this.parameter = 'something_relevant'
   }
}

var p = new Main()
p.method()
console.log(p.method.parameter)

Я пробовал это, и он записывает 'undefined'.Это о сфере?

Ответы [ 2 ]

3 голосов
/ 24 декабря 2011

Внутри method() вы устанавливаете свойство объекта, для которого вызывается метод, а не объекта функции, представляющего метод.

Это показывает разницу внутри метода:

this.method = function() {
   this.parameter = 'abc'; // Set parameter on the object on which method() is called
   this.method.parameter = 'xyz'; // Set parameter on the object representing the method itself
};

Это показывает разницу в доступе к свойству после вызова метода

p.method();
console.log(p.parameter); // Display property of the object p, equals 'abc'
console.log(p.method.parameter); // Display property of the function object representing method(), equals 'xyz'

Вы должны решить, нужно ли вам свойство для объекта функции или для p объекта. Обратите внимание, что объект функции может совместно использоваться несколькими объектами, созданными конструктором Main(). Следовательно, он будет вести себя аналогично статическому члену в таких языках, как C ++ или Java.

Если вы намереваетесь использовать свойство, определенное для объекта, ваш код должен выглядеть примерно так:

function Main() {

   this.method = function() {
      this.parameter = 'something_relevant'; // Set property on object on which method() is called.
   };
}

var p = new Main();
p.method();
console.log(p.parameter); // Read property from object p.

Если вы намереваетесь использовать свойство, определенное для объекта функции, представляющего method(), ваш код должен выглядеть примерно так:

function Main() {

   this.method = function() {
      this.method.parameter = 'something_relevant'; // Set property on function object representing method().
   };
}

var p = new Main();
p.method();
console.log(p.method.parameter); // Read property from the function object.
2 голосов
/ 24 декабря 2011

Функции - это, в основном, объекты, поэтому просто установите их так, как вы их получили:

this.method = function() {

};

this.method.parameter = 'something_relevant';

Кроме того, не исключайте точки с запятой после выражений.

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