对象可以具有其原型没有的属性吗?

时间:2019-05-09 22:19:18

标签: javascript prototype

在JavaScript中,对象及其原型(即,属性prototype作为对象)是否必须具有完全相同的属性集?

对象可以具有其原型没有的属性吗?

谢谢。

2 个答案:

答案 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()方法会密封对象,从而防止向其添加新属性并将所有现有属性标记为不可配置。只要可写,当前属性的值仍可以更改。

Object.seal() MDN definition

您还可以freeze()对象,但这将防止更改对象的任何部分。