Javascript Object.prototype未定义

时间:2012-06-20 09:45:13

标签: javascript oop class object

我正在尝试在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 

记录的“结果”具有“用户名”和“密码”属性。

P.S它仅适用于IE> 8

这是一个小提琴http://jsfiddle.net/paglia_s/z62eA/

2 个答案:

答案 0 :(得分:2)

你有一个错字。 result.protorype[key]应为result.prototype[key]

答案 1 :(得分: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));​