2014-12-04 21 views
1

我有兩個構造函數,我只想在對象b中使用對象而不使用new關鍵字,因爲我不想創建一個具有其所有屬性的對象是沒有必要的。例如,內部構造函數b我想使用構造函數b方法。在javascript中使用anthor對象而不使用新關鍵字的對象方法

function a(){ 
    this.first=function(){ 
    return 'aaaaaa' 
    } 
    this.last=function(){ 
    return 'bbbbb' 
    } 
} 

function b(){ 
    this.name= //call method last of constructor a. 
}  

var person= new b(); 
console.log(person.name) //bbbbb 

注意:構造函數a包含兩個方法。所以在給定的例子中,我沒有任何使用方法,但可能需要稍後。所以我不想創建new a()。我只想直接調用它

+0

你不能做到這一點。將方法移至原型。 – SLaks 2014-12-04 19:01:42

回答

1

有多種方法來獲得它的功能。

  1. 創建名稱空間
var a={ 
    first:function(){ 
    return 'aaaaaa' 
    }, 
    last:function(){ 
    return 'bbbbb' 
    } 
} 


function b(){ 
    this.name= a.last() 
} 
  • 添加方法原型屬性
  • var a=function(){ 
    }; 
    a.prototype.first=function(){ 
        return 'aaaaaa' 
    }; 
    a.prototype.last=function(){ 
        return 'bbbbb' 
    } 
    function b(){ 
        this.name= a.prototype.last() 
    } 
    

    最後這和以前一樣。

  • 呼叫的()和直接調用它的方法。(無())
  • 三是調用(),這將創造 「第一」 & 「最後」的方法,這將是功能的上下文。然後調用你的方法。 但這種方式不建議。前者爲 。

    function a(){ 
        this.first=function(){ 
         return 'aaaaaa' 
        } 
        this.last=function(){ 
         return 'bbbbb' 
        } 
    } 
    a() 
    function b(){ this.name= last()}  
    
    var person= new b(); console.log(person.name) //bbbbb}} 
    
    +0

    你的第一個例子不起作用。當我刪除這個。那麼它工作正常。我只是想知道你說的3點,你說的是「直接調用()並且直接調用它的方法(沒有())」,你可以舉一些 – Carlos 2014-12-05 02:39:52

    +0

    @amit的例子,我做了一些修改,請參考它。 – 2014-12-05 07:56:28

    +0

    對不起,在命名空間中不需要這個。抱歉我的錯字錯誤 – 2014-12-05 08:17:02

    0

    firstlast直到您創建a的實例纔會存在。如果這些只是靜態方法,爲什麼不使用一個對象?

    var a = { 
        first: function(){ 
        return 'aaaaaa' 
        }, 
        last: function(){ 
        return 'bbbbb' 
        } 
    }; 
    
    1
    function a(){ 
    
        this.first=function(){ 
        return 'aaaaaa'; 
        } 
    
        this.last= lastfunc; 
    
    } 
    
    function b(){ 
        this.name= lastFunct() 
    } 
    
    var person= new b(); 
    console.log(person.name) //bbbbb 
    
    function lastFunct() { 
        return 'bbbbb'; 
    } 
    
    +0

    我知道你正在複製OP答案儘可能接近,但可能會更好地將這些函數添加到構造函數原型。例如b.prototype.name = function ...,a.prototype.last = lastfunc,a.prototype.first = function ... – Patrick 2014-12-04 19:04:15

    +0

    @Patrick我同意,但我會保留原樣,因爲還有另一個答案解。它仍然有效。 – Ceres 2014-12-04 19:06:55

    +0

    同意。我在其他答案之前提供了評論:) – Patrick 2014-12-04 19:08:00

    2
    function a(){ 
    
    } 
    
    a.prototype.last=function(){ 
        return 'bbbb' 
    } 
    
    function b(){ 
        this.name= a.prototype.last()//call method last of constructor a. 
    }  
    
    var person= new b(); 
    console.log(person.name) //bbbbb 
    
    +0

    您的工作正常。只是爲了知道在構造函數中直接賦值方法和使用原型添加方法之間的區別是什麼 – Carlos 2014-12-04 19:07:19

    +0

    那麼,下面是一個很好的詳細答案:http://stackoverflow.com/questions/2784844/setting-javascript-prototype-function-within -object-class聲明 – juvian 2014-12-04 19:09:56

    相關問題