Javascript / NodeJS:在对象中传递似乎覆盖" self" - 关闭问题?

时间:2014-03-17 15:02:34

标签: javascript node.js closures

我的第一个Stackoverflow问题(我记得)。经过多年的缺席并尝试使用Node和Javascript,我正在慢慢重新开发。

我希望这很简单,但我看不出我做错了什么。

我有一个相当简单的javascript对象的2个实例。 当我将该对象的一个​​实例传递给另一个函数时,其他东西就会掉下来。

  • 我第一次引用“自我”值时没关系。

  • 然后我在传入的对象上调用一个函数。

  • 如果我之后再次尝试引用“self”,似乎“self”已被传入的对象覆盖。

这是对象来源:

"use strict";
//simple object
module.exports.SimpleObject = function SimpleObject(inputName) {
    try{
        var self = this; //closure so we don't lose this reference in callbacks
        self.name = inputName; 

    }
    catch(err) {
        console.log('Unable to create SimpleObject: '+err);
    }

    SimpleObject.prototype.getName = function() {
        self = this;
        return self.name;
    }

    SimpleObject.prototype.nestedOverwrite = function(anObject) {
        self = this;
        return "#1 self.name: "+self.name+" ObjectName: "+anObject.getName()+" #2 self.name: "+self.name;
    }

    return this;
}

这是测试用例:

var  testSimpleObjectModule = require('./simpleObject');

var o0 = new testSimpleObjectModule.SimpleObject('test0');
var o1 = new testSimpleObjectModule.SimpleObject('test1');
console.log(o0.nestedOverwrite(o1));
console.log(o1.nestedOverwrite(o0));

这是我得到的输出:

#1 self.name: test0 ObjectName: test1 #2 self.name: test1
#1 self.name: test1 ObjectName: test0 #2 self.name: test0

希望你能在每种情况下看到,第一次调用self.name是正常的,第二次调用失去了上下文。

任何帮助非常感谢!

0 个答案:

没有答案