2015-07-14 3 views
1

Я знаю, что мы можем установить функцию свойства, как показано нижефункция Объявите свойства внутри

function f(){} 
f['a']=1;//setting function property from outside 
alert(f.a)//alert 1 

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

function f() { 
a: 1 
} 

alert(f.a); //get 1 as output 


EDIT:
Глядя на некоторые пути, который не использует никакого создания объекта из функции конструктора или использования прототипов

+0

Вы имели в виду 'f.a = 1;'? – Bergi

+0

Да, что я имею в виду – Flake

+0

Да, вы можете, конечно, назначить свойства объекту функции изнутри функции. во всех функциях аргумент 'arguments.callee' относится к закрывающей функции, но вы действительно должны назвать свои функции, которые используют такое взаимодействие, поскольку вызываемый устарел. – dandavis

ответ

2

Нет, нет. Внутри функции идет только тело, т. Е. Код, который выполняется при вызове функции. Функция literal/declaration не является литералом объекта, даже если оба используют фигурные скобки.

Если вы ищете более декларативно, чем присвоение поставить статические свойства на функции, использовать какой-то extend функциональность:

var f = Object.assign(function f() {}, { 
    a: 1 
}); 

(все из _.extend, $.extend, Object.assign будет работать для этого цель - в противном случае просто использовать f.a =)

+0

, так что единственный способ установить свойство извне? – Flake

+0

@Flake: вы можете сделать это изнутри ('fa = 1'), но он вступит в силу только в первый раз, когда вы вызываете функцию, которую я угадываю, это не то, что вы хотите ... –

+0

@Flake: Ну, вы также можете установить свойство изнутри, но тогда вам придется вызвать функцию для выполнения задания. Не то, что ты хочешь, я думаю. – Bergi

-1

единственный способ это может быть сделано, если функция вызывается с ключевым словом: new

var f = function() { 
    this.a = 4; 
} 
var test = new f(); 
alert(test.a); // 4 

я опубликовал еще несколько тестов на этой jsfiddle:

http://jsfiddle.net/j4svr90x/2/

+1

Это не устанавливает свойство для функции вообще. * (Не мой dv, хотя я добирался до него, а потом решил не делать этого.) * –

+0

@ T.J.Crowder абсолютно прав. Строго говоря, это устанавливает свойство объекта, который создается из вызова функции. – kieranpotts

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