0

我是 JS 新手。我正在学习 JS OOP 的概念。我正在尝试使用构造函数在 JS 中创建私有变量。但是当我尝试使用 getter 访问这些值时,我收到一个错误“TypeError: 'undefined' is not a function”

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();

我无法弄清楚错误可能是什么。在这方面需要一些帮助。

4

3 回答 3

2

因为您没有将函数附加到this,它指向构造函数的实例。附加到this的属性和函数就像经典 OOP 中的“公共”属性和方法。

此外,变量numbersuit存在于实例内部,但不作为实例的属性。this由于您没有附加它们,因此无法通过它们访问它们。它们就像经典 OOP 中的“私有变量”。

但是由于您的 getter 与变量在同一范围内(构造函数Card),因此它们可以访问它们,就像经典 OOP 的“getter”和“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();
于 2013-04-09T03:34:10.463 回答
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();
于 2013-04-09T03:34:59.763 回答
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();
于 2013-04-09T03:34:18.630 回答