2013-11-30 4 views
1

Я использую/вызова функций из объектов, как это:Вызов функции из объектов JavaScript

var object = { 
    fn: function(){ 
     alert('i can see it!'); 
    } 
}; 
object.fn(); // it works 

, но я не знаю, как вызвать функцию от простого {} объекта.

{ 
    fn: function() { 
     alert('i can\'t see it'); 
    } 
} 

fn(); // wont work ? 

Я хочу знать, почему это не работает? Есть ли способ заставить его работать?

+2

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

+0

Простая скрипка. http://jsfiddle.net/6LUwZ/1/ –

ответ

4

Ваш второй пример неверен синтаксис. {} интерпретируется как оператор блока с меткой и недопустимой функцией, поскольку он не имеет имени.

Если вы хотите, чтобы это сделать рядный так, вам нужно что-то больше, как это:

({ 
    fn: function() { 
     alert('now i can see it'); 
    } 
}).fn(); 

Теперь вы создаете объект с момента {} больше не может быть блок заявление, но вместо этого строковый литерал. Затем вы сразу же получаете доступ к свойству fn, которое вы определили.

Конечно, для этого мало смысла, но это ближе к тому, что вы делали.

+1

работает. и спасибо за объяснение. – user2168042

+0

Добро пожаловать. –

+2

@ user2168042 - это здорово, но, как отмечено в ответе, делать это, как будто не имеет никакого смысла? – adeneo

0

Назовите его так: object.fn();. Как сказал @BlueSkies, второй пример не будет работать, так как это недопустимый синтаксис. Вы не можете сделать это в JavaScript. Если вы назовете этот объект, как сказал Дэвид в комментариях, он будет работать. Вы не можете вызывать функцию из анонимного объекта.

Вот пример с объектом называют e: http://jsfiddle.net/dhF5k/

0

Вот правильный синтаксис для определения функции «автономной» (без объекта оболочки):

var fn = function() { ... }; 
function fn() { ... }; 
+1

Скобки были фактически сбалансированы. Это просто, что в конце «alert();» был скрыт другой. Я отредактировал вопрос ... ожидая экспертной оценки. –

+0

Извините, мой плохой ^^ ' – leaf

3

сноски внутри блоков и не внутри объекта. Передача имени-значения только внутри блоков, т.е. {} dont work. Или, по крайней мере, дать некоторую метку блоку.

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