ConstructorFunc.property vs ConstructorFunc.prototype.proper

ConstructorFunc.property vs ConstructorFunc.prototype.property

本文关键字:ConstructorFunc proper prototype vs property      更新时间:2023-09-26

下面的声明有什么区别吗?

声明1 :

someName.test1 = function() {alert("test1")}

声明2 :

someName.protoype.test2 = function() {alert("test2")}

Javascript中类属性和函数原型差异的复制

是有区别的:

someName.test1 = function() {alert("test1")} 

将此函数添加到对象(或类)someName

someName.protoype.test2 = function() {alert("test2")}

将此函数添加到someName 的所有实例


看一个真实的例子:

Object.getOwnPropertyNames = function(obj)  { ... };

,它只是一个函数命名空间放入Object类,将感兴趣的对象作为其第一个参数,然而如果它被写为:

Object.prototype.getOwnPropertyNames = function() { ... };

那么每个 Object都有这个方法,它将像这样使用:

obj.getOwnPropertyNames();

[但不要这样做,因为向Object原型添加方法是不被允许的!)

是。如果您将test2与someename对象的整个原型链相关联。它基本上就像你在这里给一个类添加一个方法它对someName的所有实例都可用。在第一种情况下,它只是被加到那个特定的物体上。

这可能一开始有点令人困惑,但如果你想要在类(someName)的所有实例中添加属性或方法,那么你将使用prototype。如果你只是想把它添加到一个对象(someName),那么你将使用第一步。