知识 分享 互助 懒人建站

    懒人建站专注于网页素材下载,提供网站模板、网页设计、ps素材、图片素材等,服务于【个人站长】【网页设计师】和【web开发从业者】的代码素材与设计素材网站。

    懒人建站提供网页素材下载、网站模板
    知识 分享 互助!

    js继承的实现

    作者:佳明妈 来源:未知 2016-06-29 人气:
    借用构造函数(constructor stealing)实现js继承 借用构造函数实现继承主要是利用call方法和apply方法。 call方法: 语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定义:调用一个对象的一个方法,以

    借用构造函数(constructor stealing)实现js继承

    借用构造函数实现继承主要是利用call方法和apply方法。
    call方法: 
    语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 
    定义:调用一个对象的一个方法,以另一个对象替换当前对象。 
    说明: 
    call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。 
    如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。 
     
    apply方法: 
    语法:apply([thisObj[,argArray]]) 
    定义:应用某一对象的一个方法,用另一个对象替换当前对象。 
    说明: 
    如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。 
    如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。
     
    call和apply方法通常被用来实现类似继承一样的功能,以达到代码复用的功效。它们的区别主要体现在参数上。
     
    call和apply真是晦涩难懂看例子:
     
        function SuperType() {
            this.colors = ["red", "green", "blue"];
        }
     
        function SubType() {
            //继承了SuperType
            SuperType.call(this);
        }
     
        var instance1 = new SubType();
        instance1.colors.push("black");
        alert(instance1.colors); //red,green,blue,black
     
        var instance2 = new SubType();
        alert(instance2.colors); //red,green,blue
     
    通过call方法继承了SuperType我们实际上是在新创建的SubType实例的环境下调用了SuperType构造函数。即执行了SuperType函数中定义的所有对象的初始化代码
     
    如何给超类型构造函数传递参数:

       function SuperType(name) {

            this.name = name;
        }
     
        function SubType() {
            //继承了SuperType
            SuperType.call(this, "yangjinjin");
            this.age = 27;
        }
     
        var obj = new SubType();
     
        alert(obj.name); //yangjinjin
        alert(obj.age); //27
     
    以上代码,SuperType构造函数接受一个name参数,直接赋给this.name属性。在调用SubType构造函数内部调用SuperType构造函数时,实际上是为SubType的实例设置name属性。
     

    共用构造函数的问题:

    方法都在构造函数内部定义,函数的复用性就无从谈起了。在超类型的原型中定义的方法,对子类型而言是不可见的。考虑这些问题,借用构造函数也是很少单独使用。
    ↓ 查看全文

    js继承的实现由懒人建站收集整理,您可以自由传播,请主动带上本文链接

    懒人建站就是免费分享,觉得有用就多来支持一下,没有能帮到您,懒人也只能表示遗憾,希望有一天能帮到您。

    js继承的实现-最新评论