簡體   English   中英

如何從構造函數中訪問原型對象?

[英]How to access a the prototype object from within a constructor function?

如何從構造函數中訪問原型對象?

在以下Javascript代碼中,我有一個Person構造函數,該函數帶有兩個getter / setter函數,以及在其原型內定義的hydrate函數:

+++++++++++++++++++++++++++++
+          Person           +
+++++++++++++++++++++++++++++
+ setFirstname( firstname ) +
+ getFirstname()            +
+ setLastname( lastname )   +
+ getLastname()             +
+++++++++++++++++++++++++++++

+++++++++++++++++++++++++++++
+     Person.prototype      +
+++++++++++++++++++++++++++++
+ hydrate( person )         +
+++++++++++++++++++++++++++++

我想從Person構造函數中調用hydrate()函數,即使這對我來說沒有意義,就像在完全創建對象之前調用方法,對嗎? 如果我錯了糾正我。 JavaScript代碼:

function Person( person ) {
    var _firstname = '',
        _lastname ='';

    if ( person ) this.hydrate( person );

    function setFirstname( firstname ) {
        _firstname = firstname;
    }

    function getFirstname() {
        return _firstname;
    }

    function setLastname( lastname ) {
        _lastname = lastname;
    }

    function getLastname() {
        return _lastname;
    }

    this.setFirstname = setFirstname;
    this.getFirstname = getFirstname;

    this.setLastname = setLastname;
    this.getLastname = getLastname;
}

Person.prototype = {

    hydrate: function( person ) {
        this.setFirstname( person.firstname );
        this.setLastname( person.lastname );
    }

};


var john = new Person( {
    firstname: "John",
    lastname: "Doe"
} );

結果:

錯誤:未捕獲的TypeError:this.setFirstname不是函數

問題:我應該怎么做? 那有可能嗎?

為了做到這一點,我應該更改了hydrate()函數的調用位置,並將其一直放置在底部[在setFirstname()和setLastname()公開可用之后),如下所示:

function Person( person ) {
    var _firstname = '',
        _lastname ='';


    function setFirstname( firstname ) {
        _firstname = firstname;
    }

    function getFirstname() {
        return _firstname;
    }

    function setLastname( lastname ) {
        _lastname = lastname;
    }

    function getLastname() {
        return _lastname;
    }

    this.setFirstname = setFirstname;
    this.getFirstname = getFirstname;

    this.setLastname = setLastname;
    this.getLastname = getLastname;

    if ( person ) this.hydrate( person );

}

Person.prototype = {

    hydrate: function( person ) {
        this.setFirstname( person.firstname );
        this.setLastname( person.lastname );
    }

};


var john = new Person( {
    firstname: "John",
    lastname: "Doe"
} );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM