Javascript Object.prototype 未定义

标签 javascript oop class object

我试图在 javascript 中创建一个简单的可扩展“类”,但是当在原型(prototype)中设置属性时,它告诉我原型(prototype)未定义:

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

这是一个 fiddle http://jsfiddle.net/paglia_s/z62eA/

最佳答案

只是不要使用以下方法创建您的对象: 类 = {};

但是通过使用: 类 = 函数 (){};

创建一个带有原型(prototype)的新对象..

您的代码将如下所示:

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));​

关于Javascript Object.prototype 未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11116840/

相关文章:

javascript - Jquery .html 不起作用

javascript - 在渲染链接到 Navlink 的组件之前隐藏当前组件 - React Router

c# - 通过其容器的 get 访问器通过 set 访问器为属性赋值是一件坏事吗?

java - 如何以OO方式修改返回值设计?

java - 堆栈使用Processing(基于JAVA)

javascript - jQuery 事件冒泡

javascript - 使用 jQuery 加载页面时自动滚动到顶部

java - 在扩展类上,我可以使用实现多个接口(interface)的类的 getter 和 setter

python - 在 Python 中将 __delitem__ 与类对象而不是实例一起使用

jQuery .css 不适用于 p 和 p.class