Javascript 原型和';这';语境混乱

Javascript 原型和';这';语境混乱,javascript,Javascript,因此,我将浏览一些旧的保存的代码片段,并对它们进行死记硬背的“学习”技术等等。。无论如何,我遇到了一些我不记得它是如何工作的代码,所以我想复习一下 我有两个对象,我想做一个mixin(我知道还有其他的方法,我已经记住了,但是下面这一个我需要更多的解释) 我是在设定男人的背景,而不是比利的背景。。。我在这里看到“Billy.prototype”是借来的,不是修改的。call是怎么做到的。。我认为MAN正在被迭代,Billy的this context被分配给它。MAN是一个函数,它变异了调用上下文(

因此,我将浏览一些旧的保存的代码片段,并对它们进行死记硬背的“学习”技术等等。。无论如何,我遇到了一些我不记得它是如何工作的代码,所以我想复习一下

我有两个对象,我想做一个mixin(我知道还有其他的方法,我已经记住了,但是下面这一个我需要更多的解释)


我是在设定男人的背景,而不是比利的背景。。。我在这里看到“Billy.prototype”是借来的,不是修改的。call是怎么做到的。。我认为MAN正在被迭代,Billy的this context被分配给它。

MAN
是一个函数,它变异了调用上下文(其中的
this
值):

它将属性
name
run
walk
放在函数中的

当您使用
.call
时,您调用的函数的第一个参数为
.call
作为调用上下文(被调用函数中的
值)。所以

解释器运行的结果:

   Billy.prototype.name = "MAN."
   Billy.prototype.run = function() {
      console.log("I AM RUNNING", this.name, this.age)
   }
   ...
假设
MAN
中的
this
的每个实例都被
Billy.prototype
替换

因此,
Billy
现在在其原型上具有函数,并且当创建了
Billy
的实例时

var d = new Billy()
它可以访问原型上的属性和函数,比如
.run()

它是不是通过引用“Billy”变成了“MAN”。。。就像你说的,“这”是比利,当我们“加上:这。跑”,比利现在有了一个“跑”。
var MAN = function() {
   this.name = "MAN."
   this.run = function() {
      console.log("I AM RUNNING", this.name, this.age)
   }
   ...
MAN.call(Billy.prototype)
   Billy.prototype.name = "MAN."
   Billy.prototype.run = function() {
      console.log("I AM RUNNING", this.name, this.age)
   }
   ...
var d = new Billy()