簡體   English   中英

JavaScript構造函數之間的區別

[英]Differences between javascript constructor functions

這有什么區別...

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

和這個...

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

和這個...

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

謝謝!


大衛,我為正在制作的游戲編寫了一段代碼,看起來像這樣...

function Player(node){
    this.node = node;
    this.grace = false;
    this.replay = 3; 
    this.shield = 3;
    this.respawnTime = -1;
  ...
return true;
}

並且不返回參考錯誤。 它是我正在構建的JavaScript游戲中玩家的對象...

第一種依賴於通過參數設置的局部變量來設置其實例變量/屬性,第三種依賴於全局變量來設置其屬性,第二種是混合。

正如Brett所說,第二個和第三個構造函數將為新的Person實例的屬性分配任何全局變量。 但是,您仍然可以使用可能傳遞給構造函數的任何參數:

function Person()//no args
{
    //depending on which value is available:
    //prop = n-th argument OR global variable OR undefined
    this.name = arguments[0] || window.name || undefined;
    this.age = arguments[1] || window.age || undefined;
    this.sex = arguments[2] || window.sex || undefined;
}
var parrot = new Person('polly',1,'M');
console.log(parrot.name);//polly
var noSex = new Person('Joe',99);//if no global sex is set:
console.log(noSex.sex);//undefined
var sex = 'F';
var jane = new Person('Jane',25);
console.log(jane.sex);//F

第一個有效,您可以使用構造函數中發送的參數來初始化局部變量。 其余的沒有任何意義。

在第二種方法中,您將參數與可以訪問的其他變量混合在一起,您僅使用參數來初始化名稱。

而第三個基於可訪問變量,但是它們都不作為參數給出,我從沒見過使用第二和第三選項有用的東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM