2016-06-12 73 views
-1

函數調用的兩個下列用法之間有什麼區別:algis.add() vs Person.prototype.add2(algis)使用JavaScript調用函數時,以及何時傳遞對象?

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

Person.prototype.add = function(){ 
    return this.lastName + this.firstName; 
} 

Person.prototype.add2= function (person){ 
    return person.lastName + person.firstName; 
} 

var algis = new Person ('algis', 'sru'); 
alert('add = ' + algis.add()); //works 
alert('add2 = ' + Person.prototype.add2(algis)); //works 

是否有指示使用algis.add() VS Person.prototype.add2(algis)

+0

讓我知道我的答案是否有幫助 – Webeng

回答

-2

第一個例子:

var algis = new Person ('algis', 'sru'); 
alert('add = ' + algis.add()); //works 

這是創建利用人物構造函數對象的新實例。

然後,您正在調用已添加Person原型的add函數方法。

第二個例子:

alert ('add2 = ' + Person.prototype.add2(algis)); //works 

這是呼籲人原型ADD2函數並傳遞阿爾吉斯作爲參數。

附加:

如果你是如何原型繼承在JavaScript的作品(爲什麼你得到你所得到的輸出)不清楚,你可以參考以下鏈接:Link

-1

兩者之間的區別方法可分析如下:

  • 方法1 algis.add()在阿爾吉斯的原型在對象類型的原型使用函數(更精確地Person)連接之前在algis中存儲的兩個值。

  • 方法2 Person.prototype.add2(algis)是要求原型的對象類型添加變量存儲在你的algis對象。

在方法1的情況下,JavaScript解釋器將首先檢查是否對象類型具有的功能add()。如果它不是(這是你的情況),那麼根據原型繼承,JavaScript解釋器將尋找algis的原型來搜索函數add()和該原型的原型等,直到它到達最終原型Function.prototype的

重要提示:

即使你沒有問,它是在你的函數對象者爲聲明變量很好的做法要麼公共保護,或私人。這很重要,原因如下:

  1. 防止錯誤。 Javascript是一種衆所周知的語言,它具有良好的故障分享能力(同時它擁有自己的優秀部件)。其中的一個缺點就是範圍。在你的情況下,你正在使用範圍,因爲javaqscript 關閉允許範圍發生在函數內,但不是在其他地方找到的塊(當我說塊時,我指{...}之內的任何東西,因爲這被認爲是一個容易的地方爲了避免錯誤發生,建議始終聲明塊的頂部使用了哪些變量,以便代碼更易於讀取和調試。由於保持一致性非常重要,因此在函數中這也是常見的做法,即使關閉存在。
  2. 你的情況

所以,我會在代碼this.firstname = ...前放置protected firstname; protected lastname;

-2

使用以下兩個add函數沒有太大的區別。

function PersonAdd(person){ 
    return person.lastName + person.firstName; 
} 

Person.prototype.add= function (person){ 
    return person.lastName + person.firstName; 
} 

換句話說,如果你經歷了創建一個原型方法的「麻煩」,我沒有看到將它作爲一個函數在其上下文之外調用,並且必須將上下文作爲變量傳遞。

從我的角度來看,你忽略封裝的原則,這是OO的強項之一。我會一路走你的第一路。

Person.prototype.add = function(){ 
    return this.lastName + this.firstName; 
} 
var algis = new Person ('algis', 'sru'); 
alert('add = ' + algis.add()); 
相關問題