【发布时间】:2014-05-01 21:49:54
【问题描述】:
我正在学习使用原型属性在 JavaScript 上定义“类类”函数。
当我像这样定义 People 类时,一切都很好:
var People = function(firstName, lastName){
// public
this.firstName = firstName;
this.lastName = lastName;
this.fullName = function(){
console.log(full_name);
return this;
};
// private
var self = this;
var full_name = function(){
return self.firstName + ' ' + self.lastName;
}();
};
var person = new People('John', 'Smith');
person.fullName(); // => "John Smith"
但是,当我将 fullName 方法移到初始定义之外时,如下所示:
var People = function(firstName, lastName){
// public
this.firstName = firstName;
this.lastName = lastName;
// private
var self = this;
var full_name = function(){
return self.firstName + ' ' + self.lastName;
}();
};
People.prototype.fullName = function(){
console.log(full_name);
return this;
};
var person = new People('John', 'Smith');
person.fullName(); // => "ReferenceError: full_name is not defined"
我遇到了一个错误。我不明白为什么...??
【问题讨论】:
-
没有类或私有,它是函数和范围,但一些聪明人决定称它为“类”和“私有/公共”(可能是 Crockford,让我们责怪他)。
-
不清楚你想要什么。如果您希望“full_name”是一个作为原型属性可见的函数,那么它没有理由成为“私有”。
-
@adeneo 你是对的......这就是为什么我称它为“类”lol
-
@Bergi 解释得很好,但这不是我在这里问的。
标签: javascript jquery class constructor prototype