美文网首页
JavaScript类和继承

JavaScript类和继承

作者: 前端_攻城狮 | 来源:发表于2018-09-29 20:53 被阅读0次

ES5之前:
function Person(){
     this.name = 'mia';
}
Person.prototype.showName = function(){}

ES6中的类:
class Person{
        constructor(name){
                this.name = name;
        }
        showName(){
        }
}
------------------------
或者    const Person = class{}  //不推荐
------------------------

let a = 'strive';
let b = 'method';
class Person{
      [a+b](){}
}
let p1 = new Person();
p1[a+b];
let json = {
     [a+b]:'welcome';
}

注意:
1.ES6中class没有提升功能,在ES5中用函数模拟可以,默认函数提升
2.ES6里面的this比之前轻松多了

class里面取值函数(getter),存值函数(setter)

静态方法:类身上的方法
static  fnName(){}
父类.fnName()

继承:ES6中非常简单:(ES6之前继承实现方式可参考文末)
class Student extends Person{
      constructor(name,skill){
              super(name);   //一定要继承父类的构造函数
              this.skill = skill;
      }
      showName(){
               super.showName();//父类的方法执行
               //TODO做子类自己的事情
      }
}

例子:

类-拖拽

.box{

position:absolute;

            width:100px;

            height:100px;

            background-color:red;

            top:100px;

        }

.left{

left:100px;

        }

.right{

right:100px;

        }

div1div2

//普通拖拽--父类

    class Drag{

constructor(id){

this.oDiv = document.querySelector(id);

            this.disX = 0;

            this.disY = 0;

            this.init();

        }

init(){

this.oDiv.onmousedown = function (ev) {

this.disX = ev.clientX - this.oDiv.offsetLeft;

                this.disY = ev.clientY - this.oDiv.offsetTop;

                document.onmousemove = this.fnMove.bind(this);

                document.oumouseup = this.fnUp.bind(this);

                return false;

            }.bind(this)

}

fnMove(ev){

this.oDiv.style.left = ev.clientX - this.disX + 'px';

          this.oDiv.style.top = ev.clientY - this.disY + 'px';

      }

fnUp(ev){

document.onmousemove = null;

          document.omouseup = null;

      }

}

//子类 --限制范围

    class LimtDrag extends Drag{

fnMove(ev){

super.fnMove(ev)

//限制范围

            if(this.oDiv.offsetLeft<=0){

this.oDiv.style.left = 0;

            }

}

}

//调用

    new Drag('#div1')

new LimtDrag('#div2')

ES6之前企业级继承方式实现:
var inherit = (function(){
          var Buffer = function();
          return function(Target, Origin){
                     Buffer.prototype = Origin.prototype;
                     Target.prototype = new Buffer()
;
                   Target.prototype.constructor = Target;  //还原构造器
                 Target.prototype.super_class = Origin;    //设置继承源      
}    

})();

作者:亦世

链接:https://juejin.im/post/5b724336f265da27d96ef21c

来源:掘金

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关文章

  • JavaScript - 继承和类

    JavaScript - 继承和类 在这一篇中,我要聊聊 JavaScript 中的继承和“类”。 首先跟你请教下...

  • JavaScript类和继承

    ES5之前:function Person(){ this.name = 'mia';}Person.protot...

  • Javascript类和继承

    Javascript中的‘类’ Javascript中并没有严格意义上的类。ES5中通过使用首字母大写的方法来模拟...

  • JavaScript----类和继承

    类 构造函数Person中有一个构造函数constructor 调用构造函数的时候先调用constructor 继...

  • 继承

    继承:让子类拥有父类的属性和方法//继承是类与类之间的关系谈继承是一个悖论:JavaScript是函数编程流派,是...

  • javascript 类继承

    1.面向过程与面向对象 1.1面向过程 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,...

  • 理解原型对象与原型链

    背景: Javascript语言的继承机制,没有子类和父类的概念,也没有类(class)和实例(instance)...

  • TypeScript类

    继承和多态 之前的JavaScript是基于原型(prototype)继承来实现可复用的“类”,而TypeScri...

  • JavaScript面试:类继承和原型继承区别?

    对象经常在JavaScript中使用,而了解如何有效地使用它们将为您的工作效率带来巨大的胜利。实际上,糟糕的OO设...

  • 5. oop继承

    JavaScript 继承实现方式 A. 类式继承 所谓类式继承,就是将子类的原型指向父类的一个实例。这样优缺点就...

网友评论

      本文标题:JavaScript类和继承

      本文链接:https://www.haomeiwen.com/subject/fluboftx.html