Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.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 如何使原型在对象内的函数内工作?_Javascript_Function_Object_Prototype - Fatal编程技术网

Javascript 如何使原型在对象内的函数内工作?

Javascript 如何使原型在对象内的函数内工作?,javascript,function,object,prototype,Javascript,Function,Object,Prototype,我需要帮助来修复示例3中的代码。我无法排序如何使原型工作,因为这个参考。我知道this引用本地范围,但即使创建var keep=this来传递引用,它在原型中也会失败: //exemplo 1 var m1=function(){ this.a=null; this.b=null; if (typeof this.fr !== "function") { m1.prototype.fr = function (obp) { var pr

我需要帮助来修复示例3中的代码。我无法排序如何使原型工作,因为这个参考。我知道this引用本地范围,但即使创建var keep=this来传递引用,它在原型中也会失败:

//exemplo 1
var m1=function(){
    this.a=null;
    this.b=null;
    if (typeof this.fr !== "function") {
        m1.prototype.fr = function (obp) {
          var propriedade;
          for (propriedade in obp) {
        if (obp.hasOwnProperty(propriedade)) {
          this[propriedade]=obp[propriedade];
        }
          }
          return this;                
        }
    }
}

var t2=new m1().fr({"a":"eee"}); //works!
console.log(t2);


//exemplo 2
var m1=function(obp){
    this.a=null;
    this.b=null;
    if (typeof this.fr !== "function") {
        m1.prototype.fr = function () {
          var propriedade;
          for (propriedade in obp) {
        if (obp.hasOwnProperty(propriedade)) {
          this[propriedade]=obp[propriedade];
        }
          }
          return this;                
        }
    }
}

var t2=new m1({"a":"eee"}).fr(); //works!
console.log(t2);

//exemplo 3

var o1={
    m1:function(){
        var m1=this;
        this.a=null;
        this.b=null;
        if (typeof this.fr !== "function") {
            this.prototype.fr = function (obp) { //fails here
              var propriedade;
              for (propriedade in obp) {
                if (obp.hasOwnProperty(propriedade)) {
                  thia[propriedade]=obp[propriedade];
                }
              }
              return this;                
            }
        }
    }
}
var t2=new o1.m1().fr({"a":"eee"}); //fails!
console.log(t2);
根据卡里姆答案修正:

//exemplo 1
var m1=function(){
    this.a=null;
    this.b=null;
    if (typeof this.fr !== "function") {
        m1.prototype.fr = function (obp) {
          var propriedade;
          for (propriedade in obp) {
        if (obp.hasOwnProperty(propriedade)) {
          this[propriedade]=obp[propriedade];
        }
          }
          return this;                
        }
    }
}

var t1=new m1().fr({"a":"eee"});
console.log(t1);


//exemplo 2
var m2=function(obp){
    this.a=null;
    this.b=null;
    if (typeof this.fr !== "function") {
        m2.prototype.fr = function () {
          var propriedade;
          for (propriedade in obp) {
        if (obp.hasOwnProperty(propriedade)) {
          this[propriedade]=obp[propriedade];
        }
          }
          return this;                
        }
    }
}

var t2=new m2({"a":"eee"}).fr();
console.log(t2);

//exemplo 3

var o1={
    m1:new m1()
}
var t3=o1.m1.fr({"a":"eee"});
console.log(t3);
这是您的代码:

var o1={
    m1:function(){
        var m1=this;
        this.a=null;
        this.b=null;
        if (typeof this.fr !== "function") {
            this.prototype.fr = function (obp) { //fails here
              var propriedade;
              for (propriedade in obp) {
                if (obp.hasOwnProperty(propriedade)) {
                  thia[propriedade]=obp[propriedade];
                }
              }
              return this;                
            }
        }
    }
}
您正试图从当前的
this
中访问
prototype
,该
在对象方法中是当前实例

但是当前实例是一个对象文本(
o1
),而
prototype
对象用于本例中没有的构造函数

尝试为o1创建构造函数,然后在if语句中引用函数以设置原型这是您的代码:

var o1={
    m1:function(){
        var m1=this;
        this.a=null;
        this.b=null;
        if (typeof this.fr !== "function") {
            this.prototype.fr = function (obp) { //fails here
              var propriedade;
              for (propriedade in obp) {
                if (obp.hasOwnProperty(propriedade)) {
                  thia[propriedade]=obp[propriedade];
                }
              }
              return this;                
            }
        }
    }
}
您正试图从当前的
this
中访问
prototype
,该
在对象方法中是当前实例

但是当前实例是一个对象文本(
o1
),而
prototype
对象用于本例中没有的构造函数

尝试为o1创建一个构造函数,然后在if语句中引用该函数来设置原型