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在下面的回答中解释了原因。