Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无限原型链_Javascript - Fatal编程技术网

Javascript 无限原型链

Javascript 无限原型链,javascript,Javascript,有人能告诉我为什么在这个代码中: var originalfunc = function() { this.run(this) }; originalfunc.prototype.run = function(basefunc) { this.basefunc = basefunc; console.log(this); }; var r = new originalfunc(); 生成看似无限的原型链: 为什么会这样?我知道我将originalfunc obj指

有人能告诉我为什么在这个代码中:

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

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

var r = new originalfunc();
生成看似无限的原型链:

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

在这里演奏小提琴:


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

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

其效果与构造函数执行以下操作的效果相同:

this.basefunc = this;

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

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

其效果与构造函数执行以下操作的效果相同:

this.basefunc = this;

您正在调用run并将此
作为参数传递。然后将
this.basefunc
设置为该值。因此,
this.basefunc
originalfunc
,它有一个
basefunc
属性,这个属性是
originalfunc
,它有一个
basefunc
属性,这个属性是
originalfunc
。您正在调用run并将
this
作为参数传递。然后将
this.basefunc
设置为该值。因此,
this.basefunc
originalfunc
,它有一个
basefunc
属性,它是
originalfunc
,它有一个
basefunc
属性,它是
originalfunc
。实际上,这只是对自身的一个引用。与原型无关。一个有趣的问题可能是为什么Chrome没有弄明白。好吧,我知道这是一个参考,但这是否意味着我这里有某种无限循环,它正在消耗内存?我想这就是我问题的答案@MikeRifgin否-循环在Chrome控制台代码中,允许您“打开”对象。仅仅拥有一个自引用对象属性并不一定有害。事实上,这只是对自身的引用。与原型无关。一个有趣的问题可能是为什么Chrome没有弄明白。好吧,我知道这是一个参考,但这是否意味着我这里有某种无限循环,它正在消耗内存?我想这就是我问题的答案@MikeRifgin否-循环在Chrome控制台代码中,允许您“打开”对象。仅仅拥有一个自引用对象属性并不一定有害。