2011-05-14 77 views
0

代碼:JavaScript構造

1)

function Person(name,age){ 
    this.name=name; 
    this.age=age; 
} 

var p=new Person('stack',100); 
console.dir(p); 
console.info(p.name);//'stack'. 

但我不知道爲什麼我可以創造一個新的人使用:

var p2=new Person(); //no error 

沒有像一個構造函數:

function Person(){} 

爲什麼?

2)

function Person(name,age){ 
    var _name,_age; 
    this._name=name; 
    this._age=age; 
} 

var p=new Person('stack',100); 
console.dir(p); 

這是什麼和1)的方式有什麼區別?

回答

5

如果您不將參數傳遞給函數,它們將在函數內部爲undefined。你可以傳遞任意數量的參數給一個函數,你只需要這個名字。

第二個版本的唯一區別是您定義了兩個不使用的局部變量,並且您以不同的方式命名屬性。請注意,var _namethis._name不一樣。

+0

那麼你的意思是這個函數Person(name,age){this.name = name //不等於_name = name}?有什麼不同? – hguser 2011-05-14 13:43:16

+0

'var _name'創建一個局部變量。它不能從功能外部訪問。 'this._name'在你用'new Person()'創建的對象上創建一個屬性。看一個例子:http://jsfiddle.net/cWtJN/ – 2011-05-14 14:08:02

+0

所以,放棄屬性_name並不需要,只需使用this._name = name,那麼Person的實例將擁有這個屬性? – hguser 2011-05-14 14:34:41

0

1)它不是必須強調函數可以在Javascript中接收的參數的等號數。在這種情況下(p2),它們將是未定義的。 2)你用var _name,_age聲明瞭2個'private'(只是本地)變量; ..如果你不在該範圍內使用它們,則不需要。