我们说我有这样的构造函数:
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;
};
我不知道为什么我会被投票,所以如果downvoters会根据downvote的实际原因添加评论,我将不胜感激。这将有助于我更好地表达我未来的问题。
我确实理解了原型设计背后的继承概念。至少在初级水平的教程,文章和书籍中显示的程度。
让我感到困惑的可能是我在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
也是一个对象,对吗?
答案 0 :(得分:0)
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
的有效方法。背后有一个不同的概念。
为了更深入地了解两种方法之间的区别,我建议您查看我的文章The many ways to implement OOP in Javascript。