我是JS的新手。我正在学习JS OOP的概念。我试图使用构造函数在JS中创建私有变量。但是当我尝试使用getter访问值时,我收到错误'TypeError:'undefined'不是函数'
function Card(n,s) {
var number = n;
var suit = s;
//getters
var getNumber = function(){
return this.number;
};
var getSuit = function(){
return this.suit;
};
}
var test = new Card(10, 1);
test.getNumber();
我无法弄清楚错误是什么。需要一些帮助。
答案 0 :(得分:2)
因为您没有将函数附加到this
,它指向构造函数的实例。附加到this
的属性和函数就像是经典OOP中的“公共”属性和方法。
此外,变量number
和suit
存在于实例内部,但不作为实例的属性。无法通过this
访问它们,因为您没有附加它们。它们在经典OOP中就像“私有变量”。
但由于你的getter与变量在同一范围内(构造函数Card
),因此他们可以访问它们,比如经典OOP的“getters”和“setter”。
function Card(n, s) {
var number = n;
var suit = s;
//getters
this.getNumber = function () {
return number;
};
this.getSuit = function () {
return suit;
};
}
var test = new Card(10, 1);
test.getNumber();
答案 1 :(得分:1)
你想要
function Card(n,s) {
this.number = n;
this.suit = s;
}
//getters
Card.prototype.getNumber = function(){
return this.number;
};
Card.prototype.getSuit = function(){
return this.suit;
};
var test = new Card(10, 1);
test.getNumber();
答案 2 :(得分:0)
getter必须是成员函数,即必须在this
对象上定义。
在您的情况下,这些getter对构造函数是私有的,它不能在构造函数外部访问
function Card(n,s) {
var number = n;
var suit = s;
//getters
this.getNumber = function(){
return this.number;
};
this.getSuit = function(){
return this.suit;
};
}
var test = new Card(10, 1);
test.getNumber();