2015-11-05 59 views
-4

請讓我知道如果問題是愚蠢的,而不是負責?Javascript的屬性

我剛剛開始使用javascript進行單元測試。我一直在執行this博客代碼到我的應用程序。我只是混淆了名稱參數被傳遞給JavaScript中的函數。如果我們談論的Java,PHP或任何其他語言,他們採取在構造函數參數和理解像

$vehicle = new Vehicle('argument here'); 

Class Vehicle { 
    protected $name; 
    function __construct($name) { 
     $this->name = $name; // we can use the property any where in the class 
    } 
} 
//Is name Property? Object? or anything else? 
//javascript 
(function(name) { 
    "use strict"; 
    function vehicle(modal) { 
     this.modal = modal || 'Civic 2015'; 
    } 
    name.vehicle = vehicle; //? ? ? 
})(this);//also why using (this) ? 

也是一個例子將受到極大的歡迎類的東西之內使用。

+0

請在JavaScript中閱讀關於OOP的好教程。有一個可在[MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript) –

回答

0

JavaScript沒有類(真的),所以OOP的處理方式與您提到的某些語言略有不同。你會經常看到這樣的內容:

function Vehicle(make, color){ 
    this.make = make; 
    this.color = color; 
} 

Vehicle.prototype.getMake = function(){ 
    return this.make; 
} 

var myCar = new Vehicle('ford', 'green'); 
myCar.getMake(); //'ford' 

在本撥弄我做圖所示:https://jsfiddle.net/eqf2apwx/

有很多方法但是處理JS對象,和我建議你谷歌有點,特別是「Crockford Classless」,這是一種處理物體的流行方式。

0

上面使用的函數稱爲自我執行立即函數,這樣的函數內部的「this」總是指向全局對象,因爲在作爲函數調用的函數內部(也就是說,不是作爲新構造函數) 「這個」應該始終指向全局對象。

此模式很有用,因爲它爲初始化代碼提供了一個作用域沙箱。考慮以下常見的情況:您的代碼必須在頁面加載時執行一些設置任務,例如附加事件處理程序,創建對象等。所有這些工作只需要完成一次,所以沒有必要創建一個可重用的命名函數。但是代碼還需要一些臨時變量,在初始化階段完成後,您不需要 。將所有這些變量創建爲全局變量是一個壞主意。這就是爲什麼你需要一個直接的功能 - 將所有代碼包裝在本地範圍內,並且不會泄漏全局範圍內的任何變量

但是,在嚴格模式下的ECMAScript 5中,「this」引用不一定指向全局對象,所以當你的代碼處於嚴格模式時你必須採用不同的模式。因此,開發人員通常將引用從全局範圍傳遞給「this」。所以在你的情況下,作爲立即函數的參數傳遞的「this」是對全局「窗口」對象的引用。而且,這種模式使得代碼在瀏覽器之外的環境中更具可互操作性,因爲您不需要在直接函數內對「窗口」進行硬編碼。