Javascript 对象无法访问JS构造函数

Javascript 对象无法访问JS构造函数,javascript,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

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

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

因为您没有将函数附加到指向构造函数实例的
上。此
附加的属性和函数类似于经典OOP中的“公共”属性和方法

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();
此外,变量
number
suit
存在于实例内部,但不作为实例的属性。无法通过
访问它们,因为您没有附加它们。它们的行为类似于经典OOP中的“私有变量”

但是,由于getter与变量位于同一范围内(构造函数
),因此它们可以访问变量,就像经典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();

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

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();
此外,变量
number
suit
存在于实例内部,但不作为实例的属性。无法通过
访问它们,因为您没有附加它们。它们的行为类似于经典OOP中的“私有变量”

但是,由于getter与变量位于同一范围内(构造函数
),因此它们可以访问变量,就像经典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();

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

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();
你想要

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();
你想要

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

var
在函数作用域中声明一个变量。推荐阅读:您应该更喜欢基于原型的继承,而不是现在的继承,因为它更节省内存
var
在函数范围中声明变量。推荐阅读:您应该更喜欢基于原型的继承,而不是现在的继承,因为它更节省内存