2015-05-22 17 views
-3
function Person(firstName, lastName, age) 
{ 
    this.firstName = firstName; 
    this.lastName = lastName; 
    this.age = age; 
} 

var family = {}; 
family.mother = new Person("Susan", "Doyle", 32); 
… 

我們是否必須在這裏使用「this」?爲什麼?爲什麼定義參數時需要「this」?

function … 
{ 
    firstName = firstName; 
    lastName = lastName; 
    age = age; 
    } 

我不知道,如果這個問題太簡單了......

+0

'firstName = firstName;'基本上是一個無操作。將自己的本地變量分配給自己。 – Thilo

+0

JavaScript不是*那*神奇; 'this'是唯一引用新創建的對象的東西。 –

回答

0

在JavaScript中這個詞是對調用對象的引用。

因此,如果我們有一個全球性的功能

function() {console.log(this);} // Window 

我們拿到的全局對象或窗口。

如果我們有一個更深層次的功能在一個對象,如果我們使用的應用調用模式

obj.f.apply(window); // window is now bound to this. 

在您的例子,如果你只是調用

var obj = {f: function(){console.log(this);}}; 
obj.f(); // Object {f: function} we get the object that wraps the function. 

這條規則被打破

Person(); // in global scope 

你會有效地分配

window.firstName = // ... 
window.lastName = // ... 
window.age = //... 

因爲從全球範圍

調用時this關鍵字綁定到窗口對象基本上,你創建一個構造函數,應與新的運營商來調用。新的運營商包的功能有一個創建一個對象,並使用與對象作爲此參數的應用方法調用你的函數。

var bob = Person("bob"); // bob is undefined but you changed the window object 

var sue = new Person("sue"); // sue is an object like you expect. 

檢查你的代碼

var family = {}; // make an object 
family.mother = new Person("Susan", "Doyle", 32); 

,因爲您在函數執行JS,使一個新的對象,爲您和使用適用模式到對象之前使用新的。這就是發生了什麼

family.mother = {}; 
Person.apply(family.mother, ["Susan", "Doyle", 32]); 
+0

@xxkkk肯定的事情。如果這有助於你的理解,我也可以得到一個upvote? – t3dodson

+0

它需要15個聲望,我是新來的,對不起,我稍後會投票... – xxkkk

0

這裏this需要參照當前對象的值。

如果您不使用this關鍵字,則局部變量會被函數參數遮蔽。

在你的Person()函數作用域中 - 函數參數比本地變量獲得更高的優先級。這意味着您的Person()函數內部的默認firstName被認爲是函數的參數即使是同一個名字的一些領域。在這種情況下,參考該字段使用this關鍵字。

0

這是定義對象構造函數的正確方法。你可以參考here

  1. 關鍵字 在JavaScript中,稱爲的東西,是「擁有」的JavaScript代碼的對象。
  2. 當在函數中使用時,這個的值是「擁有」該函數的對象。
  3. 這個值用於對象時,是對象本身。
  4. 對象構造函數中的關鍵字沒有值。它只是新對象的替代品。
  5. 當構造函數用於創建對象時,這個的值將成爲新對象。

注意不是一個變量。這是一個關鍵字。您無法更改這個的值。

+0

該鏈接非常有幫助,謝謝! – xxkkk

相關問題