【发布时间】:2016-01-23 00:46:56
【问题描述】:
假设我有这样的构造函数:
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;
};
我不知道我为什么会被否决,所以如果投反对票的人会添加带有投反对票的实际原因的 cmets,我将不胜感激。这将帮助我更好地表达我未来的问题。
我确实在一定程度上理解原型背后的继承概念。至少在初学者级别的教程、文章和书籍中显示的程度。
让我困惑的可能是我在 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也是一个对象,对吧?
【问题讨论】:
-
我会查看一些讨论其原型继承系统的 JS 教程。
-
@DaveNewton 我做了,但这仍然不清楚,这就是我问的原因。在 Java 方面有一些经验我想向“类”Person.getfullName 添加一个方法会很好。我在任何示例中都没有看到这一点,它不会抛出任何错误,所以它会做一些事情。问题是究竟是什么,它是否有用。
-
我认为阅读我的回答这个问题会对你有所帮助(这不是重复,只是相关)stackoverflow.com/questions/31630409/…
-
@so_user JS 没有类;我会先克服这个概念上的障碍。一个对象的原型有点像它的类(只是有点);添加到原型的方法将可用于其原型链包含该方法添加到的原型的每个对象。您可能不应该尝试将 JS OOP-ness 与 Java OOP-ness 联系起来;他们使用非常不同的机制。
标签: javascript object constructor