假设我有这样的构造函数:
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也是一个对象,对吗?
发布于 2016-01-23 00:51:01
myObject.methodName = function() {};向对象myObject添加了一个名为methodName的方法。这意味着您可以直接从myObject调用它,并且不需要创建实例。
简单地说,你只需这样做就可以了:
myObject.methodName();myObject.prototype.methodName = function() {};向对象myObject原型添加了一个名为methodName的方法。这意味着它存在于myObject的每个实例中,但不能直接从myObject调用它。
你这样叫它:
var someInstance = new myObject();
someInstance.methodName();在这种情况下,myObject.methodName();会生成一个错误!
这两种方法都是在object上实现JavaScript的有效方法。只是他们背后有一个不同的概念。
为了更深入地了解这两种方法之间的差异,我建议您看一看我的文章The many ways to implement OOP in Javascript。
https://stackoverflow.com/questions/34958322
复制相似问题