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