2014-02-18 99 views
1

我正在編寫節點中的應用程序,並且遇到了一些奇怪的事情。this.property在nodejs中返回undefined

我使用call()方法將對象傳遞給一個函數來修改該對象。當我在console.log(this)函數裏面的時候,它返回的對象很好,但是當我嘗試去做console.log(this.foo)或者嘗試修改它說undefined的對象時。 更新:我也不得不提到我將這個函數傳遞給一個對象,因爲我必須將函數注入到另一個函數中。 (更具體的,我試圖讓this工作。也許這也是問題的一部分。

var obj = {name: "John", age: 23}; 
var functions = {up: function() { /* do stuff */ }, down: function() { /* do stuff */ 
functions.up.call(obj); 

up: function() { 
    console.log(this); //returns {name: "John", age: 23} 
    console.log(this.name); //returns undefined 
    this.wife = "Jenny"; //doesn't do anything 
} 

但是如果我設置的屬性與「_」他們確實存在,但不顯示當我打電話的console.log(本);

up: function() { 
    this._wife = "Jenny"; //doesn't do anything 
    console.log(this._wife); //returns "Jenny" 
    console.log(this); //still returns {name: "John", age: 23} 
} 

我用盡了一切就像使用this.set(鍵,值),this.get(鍵),this.attributes [ 「名稱」]值, ..

也許我誤解了'這個'是如何工作的,但經過幾個小時的搜索和嘗試,我很無知..

回答

2

當在控制檯中試用你的代碼時,我將語法修改爲一個函數表達式,它適用於我,也許這是你的問題?

var obj = {name: "John", age: 23}; 
up.call(obj); 

function up() { 
    console.log(this); //returns {name: "John", age: 23} 
    console.log(this.name); //returns "John" 
    this.wife = "Jenny"; // works 
    console.log(this); 
} 
+0

感謝羅尼,但我不能這樣做,因爲我必須通過一個對象傳遞函數(應該提到,也許)。我已經更新了我的問題。 –

0

我碰到這點,鉻/ WIN7 &記事本工作輸出++插件:

var obj = { name: "John", age: 23 }; 
var functions = { 
    up: function() { 
     console.log(this); //returns {name: "John", age: 23} 
     console.log(this.name); //returns undefined 
     this.wife = "Jenny"; }, //doesn't do anything 
    down: function(){ } } 
functions.up.call(obj); 
console.log('obj:',obj); 

輸出:

{名稱: '約翰',年齡:23 }
約翰
obj:{姓名:'約翰',年齡:23​​,妻子:'珍妮'}

你的理解 '這' 似乎是正確的
你可以嘗試用

temp = obj.up; 
obj.up = functions.up; 
obj.up(); 
obj.up = temp;//or: delete obj.up; 
+0

它可能與node.exe的版本有關嗎?我有文件版本:0.10.25.0,產品版本:0.10.25 – imma

+0

我正在運行相同的節點版本,所以這不是問題。另外,你的代碼本身工作正常,但是當它與我上面提到的npm模塊一起使用https:// github。com/InterNACHI/mongoose-data-migrations它有同樣的問題,所以它必須是模塊的東西,但我找不到任何錯誤的它..仍然無能。 –

0

更換

functions.up.call(obj); 

我有同樣的問題。終於讓我找到的解決方案 - 我把圓括號問題代碼:

var i = node.declarations.length; //Error: cannot get length of undefined 
var i = (node.declarations).length; // 11 

我想你應該做這樣的事情:你的回答

console.log((this.name).toString()); 

console.log((this.name));