2013-11-21 2 views
2

나는 dojo 1.9 문서를 통해 declare.safeMixin()에 관한 문서를 읽었으며 그 차이점은 lang.mixin입니다. 여기 dojo 1.9 : annotation은 declare.safeMixin에 추가합니까?

은 내가 찾은 설명 ...

safeMixin() is a function defined in dojo/declare. It has the same functionality as dojo/_base/lang::mixin(), but additionally it annotates all copied methods compatibly with dojo/declare. This decoration can affect how this.inherited() works in mixed-in methods.

사람이 주석이 추가됩니다 무엇을 더 예를 줄 수있는, 내가 example을 따를 수 있지만, 어디 정말 추가를 정확히 설명하지 않고있다 복사 된 각 메소드에?

명확성을 위해 상속에 대한 설명을 요구하지 않고 단지 lang.mixin 대신 declare.safeMixin()을 사용하여 추가 한 특수 효과에 대해 구체적으로 묻는 것입니다.

답변

2

safeMixin 대상에 혼합되는 함수에 nom 속성을 추가합니다. 이 속성은 함수가 할당 된 소스 개체의 키로 설정됩니다. 예 : declare.safeMixin(target, { foo: function() {} })으로 전화하면 해당 기능의 nom 속성은 "foo"입니다. this.inherited(arguments)이 부모 "foo"를 호출해야한다는 것을 자동으로 알아내는 데 필요합니다. safeMixin을 사용하는 대안은 부모 함수의 이름을 명시 적으로 지정하는 것입니다 : this.inherited('foo', arguments);.

4

safeMixin을 사용하면 declare을 사용하여 정의 된 프로토 타입 방법과 동일한 방법으로 this.inherited을 활용할 수있는 인스턴스로 함수를 혼합 할 수 있습니다. 당신이 (적어도,되지 않은 추가 매개 변수없이) 최우선 방법에서 this.inherited(arguments)를 호출 할 수 없을 것입니다, safeMixin없이

require([ 
    "dojo/_base/lang", 
    "dojo/_base/declare" 
], function(lang, declare){ 
    var A = declare(null, { 
     method: function() { 
      console.log('method in prototype'); 
     } 
    }); 
    var a = new A(); 

    declare.safeMixin(a, { 
     method: function() { 
      this.inherited(arguments); 
      console.log('method in instance'); 
     } 
    }); 

    a.method(); 
}); 

- 당신은 좋겠 :

예를 들어, 다음은이 메시지를 기록합니다 오류를 그만 둘 :

Error: declare: can't deduce a name to call inherited() 
관련 문제