Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.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 对象没有';t继承父对象函数_Javascript_Jquery_Object - Fatal编程技术网

Javascript 对象没有';t继承父对象函数

Javascript 对象没有';t继承父对象函数,javascript,jquery,object,Javascript,Jquery,Object,我在对象中定义了一些函数: var functions = { __construct: function(){ console.log(this); this.prototype.__construct(); // <problem } }; 但在那之后,当我尝试调用_构造函数时: var plugin = function(){}; plugin.prototype.__construct = function(){ cons

我在对象中定义了一些函数:

var functions = {
    __construct: function(){
        console.log(this);
        this.prototype.__construct(); // <problem
    }
};
但在那之后,当我尝试调用_构造函数时:

var plugin = function(){};

plugin.prototype.__construct = function(){
    console.log('parent');
};

var i = new plugin();
i = $.extend({}, i, functions);
i.__construct();
我得到这个错误:

未捕获的TypeError:无法调用未定义的

因为这一行:

this.prototype.__construct();

我试图看看是否可以从子构造函数调用父构造函数,但似乎该对象没有原型?wtf?

不确定您在这里试图做什么,但在使用您提供的代码时,我确实有一个_构造函数:

  var functions = {
        __construct: function(){
          console.log(this);
          this.prototype.__construct(); // <problem
        }
      };
var plugin = function(){};    
plugin.prototype.__construct = function(){
  console.log('parent');
};
var i = new plugin();
i = $.extend({}, i, functions);
console.log(i.__construct===functions.__construct);//true
console.log(i.__construct===plugin.prototype.__construct);//false

“在我创建函数的新实例之后”--为什么在之后?因为$.extend返回一个简单对象,而不是函数,并且我无法调用简单对象^。投票否决一个问题是非常荒谬的。我并不是说这个问题应该或者不应该被否决,但它不应该因为添加了这个标记而被否决。@thenewseattle我猜$.extend是ECMA附带的东西,是吗?@thenewseattle编辑这个问题,如果你认为不相关,就删除这个标记。如果问题的形式有点草率,就不应该投票表决。由于这个原因,否决投票并不能提高该站点上资源的质量。我知道每个对象都会共享原型中的内容,但我无法从
中访问它们。原型
:|@Alex对象实例没有原型,函数有原型。如果使用构造函数创建对象实例,那么当您请求实例上无法直接找到的成员时,构造函数的原型将是原型链中使用的第一个原型。无法从实例访问实例原型,因为该实例没有原型。关于构造函数和原型的介绍也会解释这一点。好的,我现在明白了,对不起:(所以没有真正的方法在javascript中扩展函数并能够调用父函数:(@Alex我答案中的链接展示了如何使用构造函数和原型。它有点僵硬,并且假设您首先定义了对象(它们的继承结构和/或混合结构)。我可以尝试找到一种更动态的方法,将函数与插件实例混合在一起。@Alex用一个如何扩展现有实例的示例更新了答案。通常,您先定义结构,然后在此基础上创建实例,但如果您愿意,您可以从现有对象中动态添加和删除行为。
var functions = {
    __construct: function(){
      this.constructor.prototype.__construct.call(this);
    }
};

var Plugin = function(){};
Plugin.prototype.__construct = function(){
  console.log('parent');
};

var i = new Plugin();
i = $.extend(i,functions);
i.__construct();