2015-08-24 8 views
-2

В чем разница между нормальной функцией и функцией внутри объекта в JavaScript? Какой из них лучше всего использовать и как они работают?Какая разница между нормальной функцией и функцией внутри объекта

Что я имею в виду что-то вроде этого:

var a={ 
    funct:function(){ 
     // ... 
    } 
} 
a.funct(); 

function funct() { 
    // ... 
} 
funct(); 
+0

Просто функция объекта имеет доступ к внутреннему состоянию объект. – mic4ael

+2

Ну, это функция на объекте, другая функция не на объекте. Между ними нет фундаментальной разницы. Технически * каждая * единственная функция является функцией на * some * объекте. Пожалуйста, уточните, что вас путает. – deceze

+0

Они оба находятся внутри объекта. One is 'window.funct' Другой -' window.a.funct' – Curt

ответ

0

«функция внутри объекта» А называется «метод». Это имеет ключевое различие, что он может получить доступ к другим свойствам внутри объекта, используя this. Поэтому он обычно предназначен для того, чтобы каким-то образом манипулировать или извлекать данные из объекта.

Напротив, функция вне объекта обычно предназначена для самостоятельной работы вне любого конкретного контекста.

Вышеприведенное упрощено, поскольку комментаторы быстро указывали. Я сомневаюсь, что это правильный форум для расширенного учебника по более глубокому значению this или как вызвать функции с альтернативными контекстами или иметь функции внутри объектов, которые не зависят от контекста этого объекта.

+0

Любая функция может иметь доступ к любому объекту с помощью 'this' ... – deceze

+0

yep, это не ответ. Вопрос был о различии, но вы просто дали объяснение термина – vladkras

+1

Конечно, давайте получим все технические и смутим OP с 'apply' и' call', или пока вы находитесь, не забудьте бросить предложение ES7 для синтаксиса привязки ':: foo.bar()', который должен немного смутить его. –

0

Я не думаю, что есть другие, все функции находятся внутри Объекта, начиная с объекта корневого окна. Обычно я использую функции внутри объекта, чтобы сделать мой код более организованным, читаемым и использовать «this» для доступа к текущим свойствам Object, вот и все.

1

Ну, между ними нет большой разницы.

Обычно функция, прикрепленная к объекту, называется методом . Чтобы быть справедливым, глобальная функция привязана к глобальному объекту (окну), поэтому его можно рассматривать как метод глобального объекта (подумайте о alert, который на самом деле window.alert).

Не все функции прикреплены к объектам, вы можете иметь локальные функции так же, как и локальные переменные.

function f() { 
    var x = 12; 
    var log = function (value) { console.log(value); }; 

    log(x); 
} 

Одно важное различие между ними будет значение this, который является псевдо-параметр, передаваемый функции, когда они вызываются, независимо, если они являются методы или нет. Если функция связана с объектом, this будет указывать на соответствующий объект при вызове с помощью синтаксиса метода:

var myObject = { 
    name: 'Joe', 
    myFunc: function() { console.log(this.name); } 
}; 

myObject.myFunc(); // will receive myObject as this and therefore will print "Joe" 

Тем не менее, «нормальная» функция будет либо получить глобальный объект (окно) или неопределенных, в зависимости от того, используете ли вы строгий режим или нет (по умолчанию вы этого не сделали, поэтому этот укажет на окно).

function f() { console.log(this.constructor); } 
f(); // function Window() 

Другой ответ о стоимости this можно найти here (полное раскрытие информации: Я автор этого ответа, а)

Смежные вопросы