Javascript 对象与功能原型属性-哪一个应该占主导地位?

Javascript 对象与功能原型属性-哪一个应该占主导地位?,javascript,properties,prototype,Javascript,Properties,Prototype,我有以下代码: Object.defineProperty(Object.prototype,'json'{ 可配置:true,可枚举:false,可写:true, 值:函数(){return'Object.json'} }); 功能体(){ 返回1 } Object.defineProperty(Body.prototype,'json'{ 可配置:true,可枚举:false,可写:true, 值:函数(){return'Body.json'} }); console.log(Body.js

我有以下代码:

Object.defineProperty(Object.prototype,'json'{
可配置:true,可枚举:false,可写:true,
值:函数(){return'Object.json'}
});
功能体(){
返回1
}
Object.defineProperty(Body.prototype,'json'{
可配置:true,可枚举:false,可写:true,
值:函数(){return'Body.json'}
});
console.log(Body.json())
当我运行时,会得到一个意外的结果:

Object.json

我认为函数是一个对象,从最松散的意义上讲(因为
typeof
将返回不同的值),因此,函数可以从对象继承,但如果函数是从对象派生的,我希望它的属性覆盖或隐藏基类的属性。然而,结果表明情况并非如此


这是怎么回事?我如何获得函数上定义的属性以覆盖对象上定义的属性?

当您调用
Body.json()
时,您不是在
Body
的“实例”上调用
json()
,而是在继承自
对象的
Body
本身上调用

如果在
Body
本身上定义属性,则在计算
Body.json()调用时,该属性将优先:

Object.defineProperty(Object.prototype,'json'{
可配置:true,可枚举:false,可写:true,
值:函数(){return'Object.json'}
});
功能体(){
返回1
}
Object.defineProperty(主体“json”{
可配置:true,可枚举:false,可写:true,
值:函数(){return'Body.json'}
});

console.log(Body.json());//“Body.json”
如果在没有defineProperty(Object.prototype…block)的情况下运行代码,则返回Body.json不是一个函数。@robby cornelissen在下面的回答中解释了原因。