0

Я читал, что мы можем вызывать анонимную функцию как переменную. Однако я пытаюсь это сделать и в дополнение к этому хочу получить доступ к его свойствам и методам. Вот мой кодJavascript - Как вызвать анонимный метод в качестве переменной и получить доступ к его свойствам и методам?

var cooking = function(){ 
     this.dessert = "Ice Cream"; 
     this.numberOfPortions = 20; 
     this.doubleLunch = function(){this.numberOfPortions = 40; 
      document.write(this.numberOfPortions);}; 
     }; 

document.write(cooking.dessert); 

Но ничего не получаю. Можете ли вы сказать мне, что я делаю неправильно? Thanks

ответ

1

cooking - это функция. Когда вы назовете это, он определит ряд свойств на любом this.

Структура подразумевает, что она предназначена для использования в качестве функции-конструктора, поэтому вы должны создать экземпляр с помощью ключевого слова new.

Тогда вы можете взаимодействовать с экземпляром.

var meal = new cooking(); 
document.write(meal.dessert); 

NB: Конвенция предписывает, что функции конструктора (и только функции конструктора) должны быть названы, начиная с заглавной первой буквой, так что вы должны переименовать его в кулинарию.

+0

Там нет абсолютно никакого смысла в присвоении его переменной. Просто 'function Cooking() {...}' имеет больше смысла. – Jan

+0

Который также присваивает его переменной. В общем, я бы рекомендовал объявление функции над анонимным выражением функции. – Quentin

+0

@Quentin Благодарим вас за ответ, но почему это необходимо для создания экземпляра. Например, когда я выполняю он показывает мне номер 7. Это потому, что эта функция отличается от мой первый? – GniruT

1

this ссылается на себя, когда функция вызывается как конструктор, который вы можете использовать, используя выражение, вызываемое сразу же (IIFE).

var cooking = (function() { 
    return new function() { 
     this.dessert = "Ice Cream"; 
     this.numberOfPortions = 20; 
     this.doubleLunch = function() { 
      this.numberOfPortions = 40; 
      document.write(this.numberOfPortions); 
     }; 
    } 
})(); 

document.write(cooking.dessert); 

DEMO: http://jsfiddle.net/fk4uydLc/1/

Однако, вы можете достичь того же результата с помощью простой старый объект JavaScript (POJO).

var cooking = (function() { 
    var obj = {}; 

    obj.dessert = "Ice Cream"; 
    obj.numberOfPortions = 20; 
    obj.doubleLunch = function() { 
     obj.numberOfPortions = 40; 
     document.write(obj.numberOfPortions); 
    }; 

    return obj; 
})(); 

document.write(cooking.dessert); 

DEMO: http://jsfiddle.net/vmthv1dm/1/

Если вы планируете использовать конструктор несколько раз, то подход @Quentin упомянул это путь.

function Cooking() { 
    this.dessert = "Ice Cream"; 
    this.numberOfPortions = 20; 
    this.doubleLunch = function() { 
     this.numberOfPortions = 40; 
     document.write(this.numberOfPortions); 
    }; 
} 

var cooking = new Cooking(); 

document.write(cooking.dessert); 

DEMO: http://jsfiddle.net/jsd3j46t/1/

+0

спасибо за ответ. Я делаю то же назначение, что и в другом ответе. Почему это необходимо для создания экземпляра. Например, когда я выполняю он показывает мне номер 7. Это потому, что эта функция отличается от моей первый? – GniruT

+0

по причине 'этот'. 'this' относится к самому себе только тогда, когда это экземпляр, и почему вам нужно использовать' new'. В противном случае 'this' является внешней областью, в данном случае объектом' window'. http://jsfiddle.net/jsd3j46t/ –

+0

Я использую «this», потому что хотел объявить свойства объекта-объекта. Я ошибаюсь? Есть ли другие способы? – GniruT