对象无法访问JS构造函数

时间:2013-04-09 03:31:54

标签: javascript

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

我无法弄清楚错误是什么。需要一些帮助。

3 个答案:

答案 0 :(得分:2)

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

此外,变量numbersuit存在于实例内部,但不作为实例的属性。无法通过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();