Javascript - 如何向对象构造函数添加属性

时间:2016-05-01 07:01:04

标签: javascript

如何在JavaScript中向构造函数添加属性?例如。如果我有以下功能。

function Hotel(name)
{
   this.name = name;
};

var hotel1 = new Hotel('Park');

我可以添加一个可以在类中本地使用的“本地”变量,就好像它是私有的,使用关键字“this”使用相同的表示法。当然它不会是私有的,因为创建的对象能够正确使用它吗?

我可以这样做吗?我使用this关键字还是使用var关键字? 哪一个?我在底部的函数构造函数上有示例2

1. var numRooms = 40;
2. this.numRooms = 40;
3. numRooms : 40,

function Hotel(name)
{
   this.name = name;
   this.numRooms = 40;
};

我知道如果我想在对象构造函数中使用函数,我需要使用this字。正如我上面提到的那样,这对正常变量是否也有效。

function Hotel(name)
{
   this.name = name;
   this.numRooms = 40;

   this.addNumRoomsPlusFive = function()
   {
       return this.numRooms + 5;
   }

};

2 个答案:

答案 0 :(得分:2)

您可以简单地将私有变量添加到构造函数中:

function Hotel(name) {

    var private = 'private';

    this.name = name;
};

但是,如果您在没有Hotel运算符的情况下使用new函数,则附加到this的所有属性和函数都将变为全局。

function Hotel(name) {

    var private = 'private';

    this.name = name;
};

var hotel = Hotel('test');

console.log(name); // test

最好在构造函数中返回一个对象:

function Hotel(name) {

    var 
        private_var = 'private',
        private_func = function() {

            // your code
        };

    retur {

        name: 'name',
        public_func: private_func
    }
};

var hotel = Hotel('test');

console.log(name); // undefined

因此,如果您将使用Hotel构造函数而不使用new运算符,则不会创建全局变量。仅当返回值是对象时,才可以执行此操作。否则,如果您尝试返回任何不是对象的内容,构造函数将继续其常规行为并返回this

答案 1 :(得分:0)

通常使用闭包执行:

var Hotel = (function() {
      var numrooms=40; // some kind of private static variable

      return function(name) { // constructor
         this.numrooms = numrooms;
         this.name = name;
      };
}());

var instance = new Hotel("myname");