2016-05-01 112 views
2

如何在JavaScript中为构造函数添加属性?例如。如果我有以下功能。Javascript - 如何将属性添加到对象构造函数

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

var hotel1 = new Hotel('Park'); 

可我再补充一点,可以在本地类中,就好像它是私人用相同的符号使用关键字“这个”使用的“局部”变量。当然,它不会是私人的,因为创建的对象将能够正确使用它?

我可以这样做吗?我使用this关键字还是我使用var关键字 这是哪一个?我有在底部

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

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

我知道,如果我想对象的构造函数中的一个函数,我需要使用this字例2的功能构造。如上所述,这对于正常变量是否会起作用?

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

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

}; 
+0

这是指其范围存在于当前文档中的变量。 Var会声明变量,你的第三点不会做任何事情。我认为你正在将属性分配给对象。这不是你分配的方式 –

+0

我错误地改正了。 –

+0

我只想知道你是否可以使用this关键字来声明新的变量,而不是使用关键字var。正如使用addNumRoomsPlusFive函数完成的。更正。我不添加变量我添加属性。 –

回答

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

+0

总之。这个。操作符与说var相同?它是一个公共变量? –

+0

如果您将使用'var'在函数中创建一个变量,它将自动成为该函数的私有(或本地)。 –

+0

@HugoPerea阅读关于JavaScript关闭。他们很快就会成为好朋友。 – evolutionxbox

相关问题