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 中的实际对象都是相同的 - 您没有做错任何事。
记录行为不规范。它取决于引擎。
我正在关注 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 中的实际对象都是相同的 - 您没有做错任何事。
记录行为不规范。它取决于引擎。