2014-02-10 37 views
0

我跑了下面的Javascript代碼。init是Javascript Object Literals的特殊保留關鍵字嗎?

var Zoo = { 
animals: [], 

init: function (animal_list) { 
    for (i = 0; i < animal_list.length; i++) { 
    this.animals.push(animal_list[i]); 
    } 
} 

它看起來像init鍵映射到一個可執行的函數。該功能將動物列表中的每個項目列入動物列表中。

如果我在我的母語紅寶石,我會做這樣的事情:

class Zoo 
    def initialize animal_list 
     @animals = animal_list #animal_list is an array 
    end 
end 

所以是初始化的初始化函數的JavaScript的相同呢?在Ruby中,我可以叫

my_ruby_zoo = Zoo.new ["lions", "tigers", "bears"] 

在JavaScript中,並初始化函數映射到

var my_javascript_zoo = Zoo.new(["lions", "tigers", "bears"]); 
+1

否;這只是一個功能。像任何其他功能一樣,如果您調用它,它將運行。 – SLaks

回答

1

是init的JavaScript對象字面特殊的保留關鍵字?

不,完全沒有。 JavaScript中沒有用於初始化的預定義函數。通常情況下,如果你需要一個在JavaScript對象的「類」,使用構造函數與new關鍵字:

function Person(first, last) { 
    this.first = first; 
    this.last = last; 
} 

// Usage: 
var chuck = new Person("Charles", "Foreman"); 

你可以再補充一點,通過new Person創建可以使用所有實例功能,加入他們作爲被分配到通過new Person創建的對象(即原型從Person.prototype財產採取的)性能的原型:

Person.prototype.getFullName = function() { 
    return this.first + " " + this.last; 
}; 

因爲這是一個絮叨和處理繼承層次是比它更多的精力其他語言(事情就是這樣g固定在ES6中),那裏有很多庫提供幫助函數來爲你提供幫助。 (我的名字叫做Lineage,還有Resig的Really Simple Inheritance,PrototypeJS的Class等)。其中一些幫手腳本可能會賦予某些​​函數名稱特殊的含義。例如,在Lineage和PrototypeJS的Class中,稱爲initialize的函數都是特殊的。 (我看過一些ctor是特別的地方。)

但是不在JavaScript本身內部。

Zoo可能是這樣的:

function Zoo(animal_list) { 
    this.animals = animal_list.slice(0); // Copy the array 
} 

如果您要添加的所有Zoo情況下可用的功能,通常你把它們添加到由new Zoo分配原型:

Zoo.prototype.showAll = function() { 
    this.animals.forEach(function(animal) { 
     console.log(animal); 
    }); 
}; 

// Usage: 
var z = new Zoo(['Tortoise', 'Emu', 'Lion']); 
z.showAll(); 
1

如果你想讓你的Zoo類是一個構造函數,它應該是一個函數而不是對象文字:

var Zoo = function(animal_list) { 
this.animals = []; 

for (i = 0; i < animal_list.length; i++) { 
    this.animals.push(animal_list[i]); 
} 
} 

var myZoo = new Zoo(["lions", "tigers", "bears"]);