2017-08-16 68 views
0

我有一個關於Javascript函數內部屬性訪問的非常簡單的問題。應該是有史以來最簡單的事情,但我不能明白爲什麼這不起作用:在JavaScript中調用函數的屬性

我有一個對象:

var myObj = { 
    first: "First text", 
    second: "Second text", 
    third: "Third text" 
}; 

我要撥打的第一個屬性:

console.log(myObj.first); // First text 

一切還好。但我想打電話從一個函數這個屬性,也與新值"Fourth text"分配一個新的屬性"Fourth"

function myFunction(myObj){ 
    console.log(this.first); // [object Object] undefined 
    this.fourth = "Fourth text"; 
} 
myFunction(myObj); 
console.log(myObj.fourth); // undefined 

正如你所看到的,最後兩個調用導致不確定的。我不明白爲什麼!任何幫助將非常感謝:)

回答

1

你通過你的myObj到你的功能,但用作this。使用參數functionmyObj.first而不是this.first

var myObj = { 
 
    first: "First text", 
 
    second: "Second text", 
 
    third: "Third text" 
 
}; 
 

 
function myFunction(myObj){ 
 
    console.log(myObj.first); 
 
    myObj.fourth = "Fourth text"; 
 
} 
 

 
myFunction(myObj); 
 
console.log(myObj.fourth);

或者,如果你想與this訪問,你需要上下文綁定到myObj有:例如call並通過你的對象作爲第一個參數。現在你的函數中的this會引用傳入的對象。

var myObj = { 
 
     first: "First text", 
 
     second: "Second text", 
 
     third: "Third text" 
 
    }; 
 

 
function myFunction(){ 
 
    console.log(this.first); 
 
    this.fourth = "Fourth text"; 
 
} 
 

 
myFunction.call(myObj); 
 
console.log(myObj.fourth);

+0

是的,我忘了該函數不與對象有關,我應該與它。但是我還有一個問題:我在Google Chrome控制檯中的結果與您的不同。例如,如果我運行任何解決方案,我會得到'undefined undefined'和'undefined' ... – Nikita

+0

請注意。您在Chrome中寫入的內容有誤。再看看你的代碼,它不能被定義爲 –

+0

是的,問題是我有幾個地方定義了myFunction。它在某種程度上與某些東西混合在一起;解決方案是爲函數賦一個變量:'var myFunction = function(){...}' – Nikita

1

您需要訪問的對象。

myObj.first 
^^^^^ 

function myFunction(myObj){ 
 
    console.log(myObj.first); 
 
    myObj.fourth = "Fourth text"; 
 
} 
 

 
var myObj = { 
 
    first: "First text", 
 
    second: "Second text", 
 
    third: "Third text" 
 
}; 
 

 
myFunction(myObj); 
 

 
console.log(myObj.fourth);

正如你已經有mentione,你可以在對象的功能,產生了新的功能,這是向全世界呼籲,結果

function myFunction() { 
 
    console.log(this.first); 
 
    this.fourth = "Fourth text"; 
 
} 
 

 
var myObj = { 
 
    first: "First text", 
 
    second: "Second text", 
 
    third: "Third text" 
 
}; 
 

 
myFunction.bind(myObj)(); 
 

 
console.log(myObj.fourth);
綁定

+0

謝謝@nina,我想使用'this',但是我的函數並不知道我所指的對象,所以'通話「,」應用「或」綁定「將做到這一點! :) – Nikita

1

使用myObj爲函數的this

var myObj = { 
 
    first: "First text", 
 
    second: "Second text", 
 
    third: "Third text" 
 
}; 
 

 
//use myObj as this of function 
 
function myFunction(){ 
 
    console.log(this.first); // "First text" 
 
    this.fourth = "Fourth text"; 
 
} 
 
myFunction.call(myObj); 
 
console.log(myObj.fourth); // "Fourth text"

使用myObj在函數內部

var myObj = { 
 
    first: "First text", 
 
    second: "Second text", 
 
    third: "Third text" 
 
}; 
 

 
//use myObj inside a function 
 
function myFunction(myObj){ 
 
    console.log(myObj.first); // "First text" 
 
    myObj.fourth = "Fourth text"; 
 
} 
 
myFunction(myObj); 
 
console.log(myObj.fourth); // "Fourth text"

+0

function myFunction(myObj){ console.log(myObj.first); //打印實際數據 myObj.fourth =「第四文本」; //賦值 } myFunction(myObj); //調用並執行函數內的動作 console.log(myObj.fourth); //「第四個文本」 – xqoo0ooq

+1

我編輯了答案 – qiAlex

+0

我已經看到了,對不起 – xqoo0ooq

1

你的問題是 「這個」 withi的用法你的功能。 (關於JavaScript的其他內容:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/this

您的功能不屬於您的對象。我看到你已經給你的對象作爲參數,但你永遠不會使用它。代替「this」,你必須使用你的參數。

var myObj = { 
    first: "First text", 
    second: "Second text", 
    third: "Third text" 
} 


    function myFunction(myObj){ 
    console.log(myObj.first); 
    myObj.fourth = "Fourth text"; 
    } 


myFunction(myObj); 
console.log(myObj.fourth); 

如果你想用「本」,那麼你可以這樣做,以便:

var myObj = { 
    first: "First text", 
    second: "Second text", 
    third: "Third text", 
    myFunction: function(){ 
    console.log(this.first); 
    this.fourth = "Fourth text"; 
    } 
} 

myObj.myFunction(); 
console.log(myObj.fourth); 
+0

據我所知,如果我想使用這個有兩個選擇:函數必須在對象內,或者我應該使用調用,應用或綁定關聯功能與對象:) – Nikita

+0

是的,的確如此。很高興聽到它很清楚:D –

相關問題