1

JavaScriptで単純な拡張可能な「クラス」を作成しようとしていますが、プロトタイプでプロパティを設定すると、プロトタイプが未定義であることがわかります:

Class = {};
Class.extend = function(obj) {
    var result = Object.create(this);

    if (obj) {
        for (var key in obj) {
          if(typeof obj[key] == 'function'){
            console.log(result);
            result.protorype[key] = obj[key];
          }else{
            result[key] = obj[key];
          };
        };

        result.prototype.constructor = result;
    }

    return result;

}

var a = Class.extend({
    username: "matteo",
    password: "nn te la dico",
    getByUsername: function() {
        return this.username;
    }
});



console.log(a, Class.isPrototypeOf(a));​

「a」を定義するときに渡されたプロパティ「getByUsername」を設定しようとすると、問題が発生します。コンソールを見ると、次のように報告されます。

Uncaught TypeError: Cannot set property 'getByUsername' of undefined 

ログに記録された「結果」には、「ユーザー名」と「パスワード」のプロパティがあります。

PSそれはIE> 8でのみ動作します

ここにフィドルがありますhttp://jsfiddle.net/paglia_s/z62eA/

4

2 に答える 2

2

: Class = {}; を使用してオブジェクトを作成しないでください。

しかし、次を使用して: Class = function(){};

プロトタイプで新しいオブジェクトを作成します..

コードは次のようになります。

Class = function(){};

Class.extend = function(obj) {
    var result = Object.create(this);

    if (obj) {
        for (var key in obj) {
          if(typeof obj[key] == 'function'){
            console.log(result);
            result.prototype[key] = obj[key];
          }else{
            result[key] = obj[key];
          };
        };

        result.prototype.constructor = result;
    }

    return result;

}

var a = Class.extend({
    username: "matteo",
    password: "nn te la dico",
    getByUsername: function() {
        return this.username;
    }
});


console.log(a, Class.isPrototypeOf(a));​
于 2012-06-20T10:00:34.560 に答える
2

タイプミスがあります。result.protorype[key]する必要がありますresult.prototype[key]

于 2012-06-20T09:50:12.763 に答える