2014-10-29 55 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

我想也許可以把它改變原型說或通過增加一個額外的功能ob,在該範圍內,這將改變abcd的原型。 – Lrdv 2014-10-30 08:28:54

+0

不,你不能觸摸它存在於內存中的'abcd',它不在對象內或其他東西中,所以無法訪問它。你可以用'say'或'prefix'做你想做的事情,因爲它們是暴露的。 – Asgaroth 2014-10-30 15:48:59