Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Object.prototype未定义_Javascript_Oop_Class_Object - Fatal编程技术网

Javascript Object.prototype未定义

Javascript Object.prototype未定义,javascript,oop,class,object,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(re

我试图在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 
记录的“结果”具有“用户名”和“密码”属性

另外,它只在IE>8时有效


这是一把小提琴,你有打字错误<代码>结果。protorype[key]应该是
结果。prototype[key]

您有一个打字错误<代码>结果。protorype[key]应该是
结果。prototype[key]

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

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

这将创建一个具有原型的新对象

您的代码如下所示:

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

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

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

这将创建一个具有原型的新对象

您的代码如下所示:

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

result.protorype[key]=obj[key]
结果。原型[key]=obj[key]?@HackedByChinese没有,它是手工创建的
结果。protorype[key]=obj[key]
结果。原型[key]=obj[key]?@HackedByChinese否它是由handsee构建的控制台此处,“a”正常工作,但在“b”中,用户名不会被覆盖,因为原始用户名位于协议中。在我的控制台中,a具有密码和用户名属性以及原型。对于b,我得到用户名和原型。对于c,我得到原型(继承的函数),对于d,我得到用户名,在原型用户名和密码(来自a)和原型(getByUsername和getto)。。这不是您想要的?例如,在b中,原型内部有来自a的用户名和密码,它们应该在外部,并且使用来自b的用户名而不是来自a的原始用户名,如果您希望它们是可重写的共享属性,则需要将所有数据放在原型中。。类似于这样:请参见此处的控制台,“a”正确工作,但在“b”中,用户名不会被覆盖,因为原始用户名位于协议中。在我的控制台中,a具有密码和用户名属性以及原型。对于b,我得到用户名和原型。对于c,我得到原型(继承的函数),对于d,我得到用户名,在原型用户名和密码(来自a)和原型(getByUsername和getto)。。这不是您想要的?例如,在b中,原型内部有来自a的用户名和密码,它们应该在外部,并且使用来自b的用户名而不是来自a的原始用户名,如果您希望它们是可重写的共享属性,则需要将所有数据放在原型中。。像这样: