2014-10-29 1 views
0

외부 라이브러리 (ember-data)를 변경하려고합니다. 그러나 나는 변화시키고 자하는 기능의 범위에 접근 할 수 없다. 다른 범위의 액세스 기능이 형제에 액세스하는 동안

은 내가 설명과 매우 단순화 된 유스 케이스와 JS 바이올린을했다 : http://jsfiddle.net/yr5Lmzyk/3/

// =========== External libary (cannot be changed)--------------------------- 
var ex = {}; 
(function (__exp__){ 
    ob = { 
     prefix: 'object-prefix', 
     say: function(word){ 
      return this.prefix + "|" + abcd(word); 
     } 
    }; 

    function abcd(a){ 
    return a + "|function-postfix"; 
    } 
__exp__.ob = ob; 
}(ex)); 

var ob = ex.ob; 

// ================= Available/ ajustable code --------------------- 
// i want to change the working of the abcd function. 
// in the real case abcd is used in many functions of ob, but i only want to change that function. 
$("#content").html(ob.say("call-parameter")); 

상단 부분은 "외부"LIB, 난 변경할 수 없습니다입니다. 아래 부분은 내 코드이며, 여기에 액세스 할 수 있습니다. ob 객체에서 say 메소드를 실행하면 함수 abcd가 사용됩니다. 이 기능의 작동을 변경하고 싶습니다.

이 범위에 액세스하여 abcd 기능을 변경하려면 어떻게해야합니까?

답변

1

abcd funntion의 당신이 그것을 변경할 수 없습니다, 당신은 say 기능을 변경할 수 있지만를 변경하여

나는 어쩌면 생각
+0

가 변경할 수 있습니다 노출되지 않은 당신이 일에 액세스 할 수있는 방법이없는 개인 프로토 타입의 말 또는 ab에 추가 기능을 추가하여 해당 범위에서 abcd의 프로토 타입을 변경합니다. – Lrdv

+0

아니요 'abcd'를 만질 수 없습니다. 메모리에 저장됩니다. 객체 나 다른 객체 안에 있지 않으므로 액세스 할 수 없습니다. 'say' 나'prefix'가 노출되어 있기 때문에 원하는 것을 할 수 있습니다. – Asgaroth

관련 문제