2017-11-14 1 views
0

함수가 javascript의 객체 인 경우 해당 속성에 대해 이름 - 값 쌍 구문을 사용할 수없는 이유는 무엇입니까? 예를 들면, 왜 다음과 같은 것이 가능/불가능합니까?함수가 JavaScript의 객체 인 경우 해당 속성에 대해 이름 - 값 쌍 구문을 사용할 수없는 이유는 무엇입니까?

function xx() { 
    name: 'jhg' 
} 
alert(xx.name); 

그 반대는 :

var person = { 
    this.age = 32; 
}; 
alert(person.age); 
+1

[자바 스크립트 : 기능과 객체 ...] (https://stackoverflow.com/questions/5958417/javascript-function-and-object) – 1stthomas

답변

2

함수 선언은 초기화를 반대하지 않기 때문에. 그것들은 용도가 다르며 사용 사례와 디자인 기준이 다른 구문이 다릅니다. 배열도 객체이지만, 우리는 그것들에 대해서도 다른 이니셜 라이저 표기법을 사용합니다. 정규 표현식과 동일합니다.

(첫 번째 예를 완벽하게 유효하고 실행합니다;. 아무것도 사용하지 않을 것이라는 ExpressionStatementname 레이블이 아닌 속성 이름이고, 레이블)

를 (또한주의 함수는 ES2015에서 내장 된 name 속성을 가지고 있습니다.이 함수의 초기화 방법은 없습니다. [해당 함수의 이름은 예제에 "xx"이됩니다.]

+0

나는 시도 그것을 실행하지만 작동하지 않습니다? – user8783104

+0

@ user8783104 : 시도하는 * * 및 "작동하지 않았다"* 어떻게 *? :-) –

0

이 객체는 객체이지만 객체 리터럴은 아닙니다 .

함수를 사용하여 객체의 인스턴스를 만들 수 있습니다. 예를 들어

function Person(name, age) { 
    this.name = name; 
    this.age = age; 
    this.sayHello = function() { 
     console.log('Hi, my name is ' + this.name); 
    }; 
} 

var bob = new Person('Bob', 24); 

bob 변수 Person 함수의 인스턴스이다. 당신은 다음과 같이 bob에서 속성에 액세스 할 수 있습니다 :

console.log(bob.name) // "Bob" 

또한 문자 그대로 그것을 정의 할 수 있습니다, 다음과 같이 :

var bob = { 
    name: 'Bob', 
    age: 24 
}; 

function 구문은 함수를 만드는 데 사용됩니다. 그들은 반복적으로 사용할 수있는 템플릿입니다. 개체 리터럴 구문은 하나의 인스턴스 만 필요하거나 데이터에 대한 동작이 첨부되지 않은 경우에만 사용됩니다.

3

원하는 특성을 할당 할 수 있지만 기능 이름이있는 읽기 전용 특성 인 Function.name은 할당 할 수 없습니다.

function xx() { } 
 

 
xx.name = 'jhg'; // is read only, because it's the function's name 
 
xx.foo = 'bar'; 
 

 
console.log(xx.name); 
 
console.log(xx.foo);
는의 사용 가능한 복제
관련 문제