this.property在nodejs中返回undefined

我正在编写一个节点的应用程序,我遇到了一些奇怪的事情。

我使用call()方法将一个对象传递给一个函数来修改该对象。 当我做console.log(这个)函数时,它返回的对象罚款,但是当我尝试做console.log(this.foo)或尝试修改该对象说,未定义。 更新:我也不得不提到我把这个函数传递给一个对象,因为我必须将函数注入到另一个函数中。 (更具体地说,我试图让这个工作,也许这也是问题的一部分。

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 [“name”]。value,..

也许我误解了这个“如何运作”,但经过几个小时的search和尝试之后,我一无所知。

当在控制台中尝试你的代码时,我将语法修改为一个函数expression式,它适用于我,也许这是你的问题?

 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); } 

我得到了在这个节点的输出,chrome / win7&notepad ++插件:

 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​​,妻子:'珍妮'}

你对“这个”的理解似乎是正确的
你可以尝试更换

 functions.up.call(obj); 

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

我有同样的问题。 最后我find了解决办法 – 我把有问题的代码放在括号里:

 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));