class.prototype.property和object.property

时间:2018-02-07 05:01:38

标签: javascript oop

使用原型有什么意义?如果我上课 -

var myClass = function(){ this.p1 = 'p1';}

现在如果我想将新属性添加为p2

我为类做了原型属性,也在对象上做了,比如

使用直接对象 - >

var obj = new myClass();
obj.p2 = 'p2';

使用原型 - >

myClass.prototype.p2 = 'p2';

这两者有何不同?或两条线都不同?

1 个答案:

答案 0 :(得分:2)

Prototype帮助您拥有一种继承(原型继承) 您可以手动向对象添加属性,或从其原型中借用属性。我们来看一些例子:

var obj = new myClass();
obj.p2 = 'p - child';
console.log(obj.p2); // p - child

var obj2 = Object.assign(obj.__proto__); // will borrow the value from the obj prototype
console.log(obj.p2); // p - child

现在看看myClass原型会发生什么:

var obj3 = Object.assign(myClass.prototype); //will borrow the value from the myClass prototype
console.log(obj3.p2); // p - parent

这里有一个不存在属性的例子:

var obj4 = new myClass();
var obj5 = Object.assign(obj4.__proto__);

obj4.p3 = 'P3 - value';

console.log(obj4.p3); // P3 - value
console.log(obj5.p3); // undefined

注意:__proto__适用于 {} ,原型适用于功能

希望这有助于澄清一点。