1

私は Javascript プロトタイプをいじっていましたが、なぜこれが機能するのかわかりません:

function User(un) {
    this.username = un;
}

User.prototype.method_name = function() {
    return this.username;
};

var user = new User("Michael");

console.log(user.method_name());

しかし、これはしません:

function User(un) {
    this.username = un;
    return{
        getUsername: function (){
            return username;
        },
        setUsername: function(username) {
            username = un;
        }
    };
}

User.prototype.method_name = function() {
    return this.username;
};

var user = new User("Michael");    
console.log(user.method_name());

「return」ステートメントを追加するとスローされるのはなぜObject #<Object> has no method 'method_name'ですか?

4

2 に答える 2

4

2 番目の例では、返されるオブジェクトは新しい "User" インスタンスではなく、プレーンな Object インスタンスであるためです。

コンストラクターでnewキーワードを使用すると、デフォルトで返されるオブジェクトはコンストラクターのプロトタイプから継承されるため、次のような継承チェーンがあります。

user -> User.prototype -> Object.prototype -> null

他のオブジェクトを返す場合、コンストラクターから継承されず、次のような継承チェーンがあります。

user -> Object.prototype -> null
于 2013-11-01T04:06:01.133 に答える