Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript class.prototype.property和object.property之间的差异_Javascript_Oop - Fatal编程技术网

Javascript class.prototype.property和object.property之间的差异

Javascript class.prototype.property和object.property之间的差异,javascript,oop,Javascript,Oop,使用原型的意义是什么?如果我像你一样上课- var myClass = function(){ this.p1 = 'p1';} 现在,如果我想将新属性添加为p2 我为类做了prototype属性,也在对象上做了,比如 使用直接对象-> var obj = new myClass(); obj.p2 = 'p2'; 使用原型-> myClass.prototype.p2 = 'p2'; 这两者有何不同?还是两行都不同?原型帮助您获得某种继承(原型继承)。 可以手动将特性添加到对象,也可以从

使用原型的意义是什么?如果我像你一样上课-

var myClass = function(){ this.p1 = 'p1';}
现在,如果我想将新属性添加为p2

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

使用直接对象->

var obj = new myClass();
obj.p2 = 'p2';
使用原型->

myClass.prototype.p2 = 'p2';

这两者有何不同?还是两行都不同?

原型帮助您获得某种继承(原型继承)。
可以手动将特性添加到对象,也可以从其原型借用特性。让我们来看看一些例子:

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
注:
\uuuu proto\uuu
用于对象{},原型用于函数


希望这有助于澄清一点。

尝试创建类的两个实例,并为
p2
属性指定不同的值。您将立即发现差异。谢谢!获得差异请不要在解释中再使用不推荐的
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
getter。始终使用
Object.getPrototypeOf