在JavaScript中,对象及其原型(即,属性prototype
作为对象)是否必须具有完全相同的属性集?
对象可以具有其原型没有的属性吗?
谢谢。
答案 0 :(得分:4)
在JavaScript中,必须有一个对象及其原型(即其属性 原型作为对象)具有完全相同的属性集?
否。 prototype
用于创建对象的实例。创建实例时,该实例成为与原型分离的对象,对其的修改不会影响原型(但是,对原型的更改将影响实例)。欢迎使用prototypical inheritance!
对象可以具有其原型没有的属性吗?
是,下面是一个示例:
function foo(){
// doesn't matter what it does
}
let fooInstance = new foo();
console.log(foo.prototype.bar); // undefined
console.log(fooInstance.bar); // undefined
console.log("************************");
// Give the instance object a new property.
// This does not create a property on the instance's prototype
fooInstance.bar = "baz";
console.log(foo.prototype.bar); // undefined
console.log(fooInstance.bar); // baz
console.log("************************");
console.log(foo.prototype.hasOwnProperty("bar")); // false
console.log(fooInstance.hasOwnProperty("bar")); // true
答案 1 :(得分:1)
如果您必须坚持使用原型,可以seal()
使用该对象。
Object.seal()
方法会密封对象,从而防止向其添加新属性并将所有现有属性标记为不可配置。只要可写,当前属性的值仍可以更改。
您还可以freeze()
对象,但这将防止更改对象的任何部分。