我正在节点中编写应用程序,但我遇到了一些奇怪的事情。
我使用call()方法将对象传递给函数以修改该对象。当我在执行console.log(this)时在函数内部,它返回对象很好,但是当我尝试执行console.log(this.foo)或尝试修改对象时,它表示未定义。 更新:我还要提到我在对象中传递此函数,因为我必须将函数注入到另一个函数中。 (更具体地说,我正试图让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(this)时不显示;
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(key,value),this.get(key),this.attributes [“name”]。value,..
也许我误解了'这个'是如何运作的,但是经过几个小时的搜索和尝试,我一无所知......
答案 0 :(得分: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);
}
答案 1 :(得分:0)
我正在从节点中获得工作输出,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:{姓名:'John',年龄:23岁,妻子:'Jenny'}
您对“这个”的理解似乎是正确的 你可以尝试替换
functions.up.call(obj);
与
temp = obj.up;
obj.up = functions.up;
obj.up();
obj.up = temp;//or: delete obj.up;
答案 2 :(得分:0)
我遇到了同样的问题。最后我找到了解决方案 - 我将有问题的代码放在圆括号中:
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));