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控制台代码中,允许您“打开”对象。仅仅拥有一个自引用对象属性并不一定有害。