【问题标题】:Efficient way for Javascript inheritanceJavascript继承的有效方法
【发布时间】:2023-03-17 19:53:01
【问题描述】:

我有两个 javascript 类

class1 = function(opt) {
      function abc () {
      }
      function def () {
      }
      function xyz () {
      }
};


class2 = function(opt) {
          function abc () {
          }
          function def () {
          }
          function lmn () {
          }
    };

这两个类包含一些常见的方法,如 (abc, def) 和一些特定的方法,如 (lmn, xyz)。任何人都可以建议我如何有效地将继承应用于这种情况,以便我可以在一个文件中使用通用方法并在各个文件中使用特定方法。我尝试了原型方法,但这不起作用。那么有没有其他方法可以解决这个问题。 谢谢。

【问题讨论】:

  • 请告诉我们这些函数是如何成为“类”的“方法”的。目前它们只是其他函数中的私有函数,将它们移动到一个公共范围内可以解决问题。还请展示您尝试过的原型方法,然后我们可以更具体地帮助您解决您的错误。

标签: javascript inheritance prototypal-inheritance


【解决方案1】:

根据这些类是只是共享行为(接口)还是实际上是公共类的子类,您应该分别使用 mixin 或原型继承。

原型示例:

function BaseClass () {
}

BaseClass.prototype = {
    abc: function () {
    },

    def: function () {
    }
};

function class1 () {
}

class1.prototype = new BaseClass();

class1.prototype.xyz = function () {
};

function class2 () {
}

class2.prototype = new BaseClass();

class2.prototype.lmn = function () {
};

还有一个 mixins 的例子:

function BaseMixin (object) {
    object.abc = BaseMixin.prototype.abc;
    object.def = BaseMixin.prototype.def;
}

BaseMixin.prototype = {
    abc: function () {
    },

    def: function () {
    }
};


function class1 () {
    BaseMixin(this);
}

class1.prototype = {
    xyz: function () {
    }
};

function class2 () {
    BaseMixin(this);
}

class2.prototype = {
    lmn: function () {
    }
};

【讨论】:

    【解决方案2】:

    Javascript 没有类

    但你可以系统化你的代码。Javascript继承与其他oop语言完全不同。

    这里,我们使用原型和构造函数。

    **prototype==>**简单来说,我是用于扩展目的

    **constructors==>**我是用来创建多个实例的。任何函数都可以用new关键字作为构造函数。

    只是示例代码以供理解。

    示例 1:使用对象文字

    var Myobject = {
    
        Function_one: function()
        {
            //some code
            Myobject.function_three();
        },
        Function_two: function()
        {
            //some code
            Myobject.function_three();//lets say i want to execute a functin in my object ,i do it this way...
        },
        Function_three: function()
        {
            //some code
        }
    };
    
    window.onload = Myobject.Function_one //this is how you call a function which is in an object
    

    示例 2:使用原型

    function function_declareVariable()
    {
       this.a= 10; //i declare all my variable inside this function
       this.b= 20;
    }
    
    function_declareVariable.prototype.Function_one = function()
    {
      //some code
        Myobject.Function_three();
    };
    
    function_declareVariable.prototype.Function_two = function()
    {
        Myobject.Function_three();
    };
    
    function_declareVariable.prototype.Function_three = function()
    {
       alert(Myobject.a or Myobject.b)
       //some code
    };
    
    var Myobject = new function_declareVariable();//this is how i instantiate
    

    REFER 1:what are constructors ,prototypes

    REFER 2:prototypal inheritance

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-19
      • 2012-06-21
      • 1970-01-01
      • 2014-06-18
      • 2011-06-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多