微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Javascript“抽象方法”

我的术语有点偏离,所以请在必要时自由纠正.我想重载 JavaScript中的一个函数和“基类”,以使用重载方法以及继承的类来访问基类方法.到目前为止,我想出了一个(工作)混合的jquery.extend()和对象文字,但这看起来不漂亮.我想知道是否有更好的方法(可以使用jquery).
var Base = new function(args,m) {
   $.extend(this,m);
   var self = this;
   this.bar = function() {
     self.foo();
   }
   this.foo = function() {
     self.blah();
   }
   this.dosomething = function() {}
};

var Child = function(arg1) {
   $.extend(this,new Base(args,{
     blah: function() {
       self.dosomething()
     }
   }));
}

解决方法

您正在寻找的是一种跨对象共享功能方法.
这正是JavaScript原型继承模式所擅长的一种.

没有必要使用jQuery或其他库来完成这一点.考虑用语言的方式去做事情.

原型

在JavaScript中,对象具有“原型”.当JavaScript寻找一个没有它的对象中的方法时,它会在原型’chain’上查找它.所以你需要做的就是在该链的较低级别覆盖该功能.

这在the tutorial about it on MDN.中有详细的解释

你的具体情况

如果我想要一个Base和Child类,那么Base有一个Child需要覆盖的方法,我们需要做的就是把它分配给该链的任何地方.

查找的顺序是

Child Object --> Child's prototype (a Base object) --> Base's prototype (an Object)

例如,假设你有一个类Base

function Base(){

}
Base.prototype.bar = function() {
     //bar logic here
     console.log("Hello");
};
Base.prototype.foo= function() {
     //foo logic here
};

Function Child(){

}

Child.prototype = new Base();

我想要孩子不同地实施吧,在这种情况下我可以做

Child.prototype.bar = function(){
   console.log("World");
}

这导致了

var a = new Base();
a.bar(); //outputs "Hello" to the console
var b = new Child();
b.bar(); //outputs "World" to the console
         //The Base instance that is the prototype of b has the bar method changed above

注意在JavaScript中的抽象类

抽象方法继承的两个主要原因是在基于经典继承(如Java)的语言中使用的是多态和代码共享.

在JavaScript中既不是问题.代码共享可以使用原型继承一​​样简单.无论如何,您可以接受任何功能,并在另一个上下文中运行它.例如,我甚至可以通过b.bar.call([])调用一个空对象的一个​​Child对象的bar方法.

至于多态性JavaScript是一种动态的鸭型打字语言.这意味着它会根据他们的能力来查看对象,而不是它们被声明的方式.如果几个对象有一个名为bar的方法,我将在每个对象上使用该方法,如果它们在数组或其他集合中.在需要通用接口,类型或祖先的Java中.

由于这些原因,像抽象类这样的东西在JavaScript中不会起很大的作用.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


什么是深拷贝与浅拷贝?深拷贝与浅拷贝是js中处理对象或数据复制操作的两种方式。‌在聊深浅拷贝之前咱得了解一下js中的两种数据类型:
前言 今天复习了一些前端算法题,写到一两道比较有意思的题:重建二叉树、反向输出链表每个节点 题目 重建二叉树: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列 {1,2,4,7,3,5,6,8} 和中序遍历序列 {
最近在看回JavaScript的面试题,this 指向问题是入坑前端必须了解的知识点,现在迎来了ES6+的时代,因为箭头函数的出现,所以感觉有必要对 this 问题梳理一下,所以刚好总结一下JavaScript中this指向的问题。
js如何实现弹出form提交表单?(图文+视频)
js怎么获取复选框选中的值
js如何实现倒计时跳转页面
如何用js控制图片放大缩小
JS怎么获取当前时间戳
JS如何判断对象是否为数组
JS怎么获取图片当前宽高