2012-11-12 3 views
2

에 새로운 속성을 추가 :나는 다음과 같은 패턴을 이해하려고 노력하고 함수 객체

그것은 collapse처럼 보이는
// https://github.com/twitter/bootstrap/blob/master/js/bootstrap-collapse.js 

    $.fn.collapse = function (option) { 
    return this.each(function() { 
     var $this = $(this) 
     , data = $this.data('collapse') 
     , options = typeof option == 'object' && option 
     if (!data) $this.data('collapse', (data = new Collapse(this, options))) 
     if (typeof option == 'string') data[option]() 
    }) 
    } 

    $.fn.collapse.defaults = { 
    toggle: true 
    } 

함수 객체입니다. 그렇다면 에 defaults을 속성으로 추가 할 수있는 이유는 무엇입니까?

다음 (jsFiddle) snippet은 새 속성을 함수 개체에 추가하려고 시도하지만 아무런 소용이 없습니다. 이게 뭐야?

var my_object = function() { 
    alert('Hello World!'); 
}; 
my_object.name = 'my_object'; 

console.log(my_object.name); // prints an empty string 
+0

유용한 답변을 제공해 주셔서 감사합니다. 대다수가 정말 좋을 때 가장 좋은 것을 고르는 일은 조금 어렵습니다. 받아 들일 수없는 대답은 +1. – moey

답변

2

예, 그것은 함수 객체입니다. javascript의 모든 객체는 속성을 가질 수 있으므로 $.fn.collapsedefaults입니다.

모든 함수 [object]는 함수의 이름이 포함 된 쓰기 불가능한 name property (이름이 지정된 경우)을 포함하고 있기 때문에 피들링이 작동하지 않습니다. 비어있는 이름 인 my_object 변수에 익명의 함수를 지정하고 있습니다. 문자열이 아니라 undefined입니다. 기능

var my_object = function() { 
    alert('Hello World!'); 
}; 
my_object.someprop = 'my_object'; 
console.log(my_object.someprop); // prints an empty string 

name 속성이 예약되어 있습니다 : 대부분의 다른 속성 이름이 특별한 작품이다 http://jsfiddle.net/KTzUw/3/

+0

아, 이제'var my_object = function() {...}'은'var my_object = function my_object() {...}'와 달리'my_object.name'이 set 빈 문자열이 아닙니다. – moey

+1

예. [이 기사의 * 명명 된 함수 식 *] (http://kangax.github.com/nfe/) – Bergi

+0

감사합니다 (+1)! 특정 플래그가있는 속성을 조사하는 방법이 있습니까? 어디서 _configure_ 또는 _non-writable_ 플래그를 찾을 수 있습니까? – moey

2

.name에서보세요.

몇 예약 된 속성 이름이 아닌
var foo = function() {}; 
console.log(foo.name); // "" 

그러나 다른, 그래, 당신이 할 수있는 같은 기능의 속성을 지정할 수 있습니다 : 귀하의 경우

function foo() {}; 
console.log(foo.name); // "foo" 

는 그것이 익명 함수로 선언 있기 때문에 빈 문자열입니다 목적. 꽤 정교한 방법으로 데이터를 필요로하는 코드에 일종의 타이 데이터를 사용할 수 있기 때문에 매우 강력 할 수 있습니다.

1

name 당신이 그것을 덮어 쓸 수 없습니다, 기능 인스턴스들에 대한 예약 특성입니다비 구성쓰기 권한이없는 플래그를 가지고있다. 그 외에도 함수개체에서 상속되며 속성을 가질 수 있습니다.

var my_fnc = function() { }; 

my_fnc.foobar = 42; 

console.log(my_fnc_foobar); // 42 
+0

고마워!특정 플래그가있는 속성을 조사하는 방법이 있습니까? 어디서 _configure_ 또는 _non-writable_ 플래그를 찾을 수 있습니까? – moey

관련 문제