为什么像这样向 JavaScript 引用类型添加方法不起作用
Why adding a method to JavaScript reference type like this doesn't work?
假设我有这样的构造函数:
function Person(firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
我想向它添加方法。
为什么会这样:
Person.prototype.getFullName = function() {
return this.firstName + " " + this.lastName;
};
是这样做的方法,而不是这个:
Person.getFullName = function() {
return this.firstName + " " + this.lastName;
};
我不知道为什么我被投了反对票,所以如果反对者能添加带有反对票实际原因的评论,我将不胜感激。这将帮助我更好地表达我未来的问题。
我确实在某种程度上理解原型背后的继承概念。至少在初学者级别的教程、文章和书籍中显示的程度。
让我感到困惑的可能是我在 Java 和类术语方面的背景,这在 JavaScript 中不是一回事。
我想这定义了一类Person
:
function Person(firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
当我使用该类创建对象时:
var myObject = new Person("John", "Doe");
我仍然可以向该对象添加一些新的属性或方法:
myObject.getFullName = function() {
return this.firstName + " " + this.lastName;
};
现在只有myObject
会getFullName
这种新方法,非常清楚。
var myObject2 = new Person("Daniel", "Cook");
对于myObject2
没有getFullName
方法,仍然很清楚。
一旦我将一个方法添加到我的"类"原型中Person
它将被使用该"类"创建的所有对象继承:
Person.prototype.getFullName = function() {
return this.firstName + " " + this.lastName;
};
现在甚至myObject2
,也有getFullName
方法。清楚。
还行。我想我正在脑海中找到问题的根源。扩展这篇文章帮助了我。
函数Person
也是一个对象,对吧?
myObject.methodName = function() {};
将一个名为 methodName
的方法添加到对象myObject
中。这意味着您可以直接从myObject
调用它,而无需创建实例。
简单地说,你只需通过这样做来调用它:
myObject.methodName();
myObject.prototype.methodName = function() {};
将一个名为 methodName
的方法添加到对象myObject
的原型中。这意味着它存在于myObject
的每个实例中,但你不能直接从myObject
调用它。
你通过这样做来调用它:
var someInstance = new myObject();
someInstance.methodName();
在这种情况下,myObject.methodName();
将生成错误!
两者都是在 JavaScript 上实现object
的有效方法。它们背后只是有不同的概念。
为了更深入地了解这两种方法之间的区别,我建议您查看我的文章 在 Javascript 中实现 OOP 的多种方法。
- 在对象中添加方法时出现问题
- 什么意思是“;向原型添加方法”;
- jQuery验证器添加方法未定义
- 向通过ReST JSON调用生成的Angular Javascript对象添加方法
- 向React中的高阶组件添加方法
- 向JavaScript对象添加方法
- 如何向[]添加方法
- 如何在流星js中为对象添加方法
- jQuery.validation 在生日年龄验证中添加方法错误
- 使用 IE8 添加方法的 JavaScript 错误
- 向方法添加方法
- 如何在 Javascript ES6 中向类添加方法
- Javascript:向对象类添加方法的优缺点是什么
- 如何更改“动物”的原型并添加方法“sayName”来打印语句
- 如何在 Illustrator CS5.1+ 中创建画板对象的添加方法所需的矩形对象
- 如何在 nodejs 中全局添加方法到 JSON、Date 或其他“本机”对象
- 什么类/类型是未定义的,是否可以向其扩展/添加方法
- 为什么在 javascript 中向数组原型添加方法会破坏 for 循环上的迭代
- 向对象添加方法
- 动态添加方法到对象