无限原型链

时间:2013-10-31 20:31:23

标签: javascript

任何人都可以在此代码中告诉我原因:

var originalfunc = function() {
    this.run(this)
};

originalfunc.prototype.run = function(basefunc) {
    this.basefunc = basefunc;
    console.log(this);
};

var r = new originalfunc();

制作一个看起来无限的原型链:

enter image description here

为什么会这样?我知道我将原始函数obj指定为运行原型的属性,但我只做了一次。

在这里工作小提琴:

http://jsfiddle.net/YmThL/

1 个答案:

答案 0 :(得分:8)

您将this.basefunc设置为this引用的对象的引用。

构造函数调用“run”,将值this传递给它。此时,this指的是正在构建的新对象。 “run”函数在同一个对象上设置“basefunc”属性(因为this也会在对“run”的调用中将其引用到参数,即对象。

效果与构造函数完全相同:

this.basefunc = this;