如何在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;
}
};
答案 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");