对象不能访问JS构造函数

Object cannot access JS constructor function

本文关键字:构造函数 JS 访问 不能 对象      更新时间:2023-09-26

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

我不能找出错误可能是什么。需要一些帮助。

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

同样,变量numbersuit存在于实例中,但不是作为实例的属性。它们无法通过this访问,因为您没有附加它们。它们就像经典OOP中的"私有变量"。

但是因为你的getter和变量在同一个作用域中(构造函数Card),所以它们可以访问变量,就像经典OOP的"getter"answers"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();

你想

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

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