原型的真正用途是什么?

时间:2018-08-27 04:59:20

标签: javascript prototype

例如1

<script>

let obj = function(){};
obj.age = 100;
console.log(obj.age);

</script>

输出:100

例如2。

let obj2 = function(){
  a:"Breaking Benjamin"
};

let obj2 = function(){};
let o = new obj2();
obj2.prototype.age = 100;
console.log(o.age);

输出:100

在示例1中,我使用的是obj.age = 100,它的输出为100 在示例2中,我使用的是obj2.prototype.age = 100;给出相同的输出100。 那么两者之间有什么区别?我应该使用哪一个?

3 个答案:

答案 0 :(得分:0)

因此,在第一个示例中,年龄是在对象级别设置的,只能通过该对象访问。

在第二个示例中,由于原型具有年龄,因此相同类型的另一个对象(obj2)也可以具有相同的年龄。参见下面的示例,

let o2 = new obj2(); // inherits the state from the prototype viz obj2

console.log(o2.age); // outputs 100

换句话说,您是在原型/类级别设置值,这些值可以由同一原型创建的其他对象访问。

答案 1 :(得分:0)

如果使用对象的一个​​实例对其进行测试,那么它可能并不明显,因此请使用两个对象对其进行测试:

let obj2 = function(){};
let o1 = new obj2();
let o2 = new obj2();
obj2.prototype.age = 100;
console.log(o1.age);
console.log(o2.age);

如果更改原型,则它会对obj2的所有实例产生影响。

如果仅在o1上进行更改,那么它仅对o2起作用:

let obj2 = function(){};
let o1 = new obj2();
let o2 = new obj2();
o1.age = 100;
console.log(o1.age);
console.log(o2.age);

  

我应该使用哪个?

这取决于用例,但这肯定总是错误的:

let o = new obj2();
obj2.prototype.age = 100;
console.log(o.age);

答案 2 :(得分:0)

在javascript中,当创建对象/函数时,JavaScript引擎向该函数添加了原型属性。此原型属性是一个称为原型对象的对象,默认情况下具有构造函数属性。构造函数属性指向原型对象为其属性的函数。