javascript/ 向 repl.it 中的原型添加函数

javascript/ add function to prototype in repl.it

我正在关注 this tutorial

function Bear(type){
  this.type = type;
}

Bear.prototype.growl = function(){
  console.log('grrr')
}

var grizzly = new Bear('grizzly')
var bBear = new Bear('bBear')

console.log(grizzly, bBear, Bear.growl)

这个结果应该是:

{
  "type": "grizzly",
  "growl": function(){
  console.log('grrr')
}
} {
  "type": "bBear",
  "growl": function(){
  console.log('grrr')
}
} undefined

但我在 repl.it 中得到的是:

Bear { type: 'grizzly' } Bear { type: 'bBear' } 

如果我将相同的代码放在 SO 代码片段中,结果是正确的。

为什么我在这里得到不同的结果?

这是不同环境如何记录对象的产物。在 Stack Overflow 上,Stack Snippets 记录了对象原型链上任意位置 的可枚举属性:

const theProto = { protoProp: 'val' };
const theInstance = Object.create(theProto);
theInstance.instanceProp = 'val';

console.log(theInstance);

Node 中的相同代码仅记录属性直接在对象上:

{ instanceProp: 'val' }

repl.it 运行通过Node.

的代码

同样,对于您的代码段,由于 growl 属性 在 prototype 对象上,当您登录 bBear 时,您您将在 Stack Snippet 中看到 growl,但如果您 运行 在 Node.

中使用相同的代码则不会

无论您的环境如何,Javascript 中的实际对象都是相同的 - 您没有做错任何事。

记录行为不规范。它取决于引擎。