2015-04-30 48 views
0

假設下面的代碼。關閉編譯器高級優化防止對象屬性重命名

1)在ClosureTestClass構造函數中,我們得到一個從外部系統傳入的對象。如果在此代碼中重命名inputObjectFromExternalSystem的property1,則從外部系統發送的對象將不具有重命名的屬性。有沒有辦法指定編譯器不要重命名特定對象的屬性。

我知道我們可以通過使用

inputObjectFromExternalSystem['property1']. 

我正在尋找像意見的東西/ ** * @expose /做。我試着用/ ** @lends * /但它沒有工作。

// ==ClosureCompiler== 
// @compilation_level ADVANCED_OPTIMIZATIONS 
// @output_file_name default.js 
// @formatting pretty_print 
// @use_closure_library true 
// ==/ClosureCompiler== 


/** @export */ 
var ClosureTestClass = (function() { 
    function ClosureTestClass(inputObjectFromExternalSystem) { 
     this.property1 = inputObjectFromExternalSystem.property1; 
     this.property2 = inputObjectFromExternalSystem.property2; 
    } 
/** @expose */ 
    ClosureTestClass.prototype.printProperty = function() { 
     console.log(this.property1); 
     console.log(this.property2); 
    }; 
    return ClosureTestClass; 
})(); 

/** @export */ 
var ClosureTestClassUse = (function() { 
    function ClosureTestClassUse() { 
     this.closureTest = new ClosureTestClass; 
    } 
    /** @expose */ 
    ClosureTestClassUse.prototype.print = function() { 
     console.log(this.closureTest); 
    }; 
    return ClosureTestClassUse; 
})(); 

var a = new ClosureTestClassUse(); 

2)有什麼用例/ ** * @lends/

回答

1

@export旨在防止重命名 - 並且是實現這一目標的唯一支持的註解。您還必須使用--generate_exports標誌,並且您的源代碼必須包含來自Closure庫的base.js文件,或包含定義goog.exportSymbolgoog.exportProperty以及相同方法簽名的定義。