JS 对类的支持

类与继承的出现,主要也是解决Js大规模的开发;

之前eb4就开始引入类和模块;javascript并没有真正意义的类;不过咱们可以模拟类;
javascript类的实例也是通过 new 操作符创建的,并且它的所有函数都可以作为构造器。构造器和普通的方法并没有什么区别;

为什么使用类呢?

显然实现集成关系方便一些方法或者属性的共享;在javascript的生态圈中 Node,Element,HTMLElement,HTMLparaphElement;Node是基于Object对象;Element基于Node…;

javascript是怎么实现类之前的关系呢?

javascript从其他语言借鉴了原型的机制,prototype作为特殊的对象属性存在每一个函数上,当一个函数通过 new 操作符实例出的对象就拥有这个对象函数的prototype对象的一切成员;从而实现对象都共享一组方法和属性;而javascript的“类”就是修改这个prototype对象,以区别原生对象和其他自定义的“类”;

注意 :必须重申,方法和属性没有被复制到原型链中的其他对象——它们只是通过前述的“上溯原型链”的方式访问。没有正式的方法用于直接访问一个对象的原型对象——原型链中的“连接”被定义在一个内部属性中,在 JavaScript 语言标准中用 [[prototype]] 表示(参见 ECMAScript)。然而,大多数现代浏览器还是提供了一个名为proto(前后各有2个下划线)的属性,其包含了对象的原型。

举例说明原型链的调用说明;

person1.valueOf()
这个方法仅仅返回了被调用对象的值。在这个例子中发生了如下过程:

1.浏览器首先检查,person1 对象是否具有可用的 valueOf() 方法。

2.如果没有,则浏览器检查 person1 对象的原型对象(即 Person)是否具有可用的 valueof() 方法。

3.如果也没有,则浏览器检查 Person() 构造器的原型对象(即 Object)是否具有可用的 valueOf() 方法。Object 具有这个方法,于是该方法被调用,

下面我们将用代码实现类的重写和共享;


    // 第一种原型写法
    var person = function (){};

    //1.使用对象字面量来设定
    person.prototype={
        say:function(){
            console.log("I say ....");
        }
    }

    //2.在赋值原型prototype的时候使用function立即执行的表达式来赋值,即如下格式:
    person.prototype= function(){
        var walk = function(){
            console.log("I walk ....");
        }
        return {
            walk:walk
        }
    }();
    //学生
    var Student = function(){

    }

    var p1 = new person();
    var p2 = new person();
    Student.prototype = new person();
    Student s = new Student();
    s.walk();//I walk ....
    console.log(p1.eyes === p2.eyes); //true
    console.log(p1.eyes === p2.eyes); //true
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值