2017-10-10 29 views
0

鑑於這樣的對象:如何在子函數中引用父對象?

var MyObj = { 
    bar: 10, 
    foo: function() { 
    alert(MyObj.bar); 
    } 
} 

我怎樣才能從一般這樣MyObj.foo引用MyObj,如果我改變var MyObjvar MyObj2我不需要修改foo功能?

+5

使用'this'而不是'MyObj'。 –

+1

取決於執行上下文。 –

+0

[在javascript中訪問父對象]的可能重複(https://stackoverflow.com/questions/1789892/access-parent-object-in-javascript) – colecmc

回答

1

如果你想治療MyObj喜歡的一類,你可以不喜歡什麼lumio建議,或者你可以不喜歡

function MyObj(){ 
    this.bar = 10; 
    this.foo = function(){ 
     return this.bar; 
    } 
} 
var a = new MyObj(); 
var b = new MyObj(); 
b.bar = 5; 
console.log(a.foo(), b.foo()) // 10 5 

相反,如果你只是想引用對象的bar值,那麼你可以用alert(this.bar);替換alert(MyObj.bar);

+0

謝謝,這看起來像我所需要的。我並不是真的想要做真正的「類」邏輯 - 只是想要或多或少地命名一些輔助函數。如果我有嵌套結構('MyObj.foo.bar.baz.func1();'),我想我可以在函數的頂部執行'var that = this;'然後''將始終無論我在哪裏,都可以參考父母 – user126715

0

班會在這裏幫助你很多。在ES5類可以像這樣創建:

function MyObj() { 
 
    this.bar = 10; 
 
} 
 
MyObj.prototype.foo = function() { 
 
    console.log(this.bar); 
 
} 
 

 
var objInstance = new MyObj; 
 
objInstance.foo(); 
 

 
var objInstance2 = new MyObj; 
 
objInstance2.bar = 20; 
 
objInstance2.foo();


ES6允許一個更好的符號:

class MyObj { 
 
    constructor() { 
 
    this.bar = 10; 
 
    } 
 
    
 
    foo() { 
 
    console.log(this.bar); 
 
    } 
 
} 
 

 
var objInstance = new MyObj; 
 
objInstance.foo(); 
 

 
var objInstance2 = new MyObj; 
 
objInstance2.bar = 20; 
 
objInstance2.foo();

用巴貝爾將其轉換到ES5。

相關問題