`
conkeyn
  • 浏览: 1505639 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

javascript中借用别的类的方法

 
阅读更多

借用别的类的方法

/**
 * Created by Administrator on 2015/12/23.
 */
//====================借用方法===============================
function borrowMethods(borrowFrom,addTo){
    var from = borrowFrom.prototype;
    var to = addTo.prototype;
    for(m in from){
        if(typeof from[m]!="function"){
            continue;
        }
        to[m] = from[m];
    }
}

// 带有通用的toString()方法的类
function GenericToString(){}
GenericToString.prototype.toString = function(){
    var props = [];
    for(var name in this){
        if(!this.hasOwnProperty(name)) continue;
        var value = this[name];
        var s = name+":";
        switch (typeof value){
            case "function": s+="function";
                break;
            case "object":
                if(value instanceof Array) s+="array";
                else s+=value.toString();
                break;
            default :
                s += String(value);
                break;
        }
        props.push(s);
    }
    var str = "";
    if(props.length>0){
        str+="[";
        for(i=0;i<props.length;i++){
            str += props[i];
            if(i<props.length-1){
                str+=",";
            }
        }
        str +="]";
    }
    return str;
}
// 带有通用的equals()方法的类
function GenericEquals(){}
GenericEquals.prototype.equals = function(that){
    if(this == that){
        return true;
    }
    var propsInThat = 0;
    for(var name in that){
        propsInThat++;
        //如果属性值不相同,返回false
        if(this[name]!==that[name]){
            return false;
        }
    }
    var propsInThis =0;
    for(name in this) propsInThis ++;
    //判断属性个数是否相等
    if(propsInThat != propsInThis){
        return false;
    }
    return true;
}

//声明Rectangle类
function Rectangle(w, h) {
    this.width = w;
    this.height = h;
}
Rectangle.prototype.area = function () {
    return this.width * this.height;
}
borrowMethods(GenericToString,Rectangle);
borrowMethods(GenericEquals,Rectangle);

var rectangle = new Rectangle(50,100);
console.log(rectangle.toString());

console.log(rectangle instanceof Object);
console.log(rectangle instanceof  Rectangle);
console.log(rectangle.constructor == Object);
console.log(rectangle.constructor == Rectangle);

 

 

d

分享到:
评论

相关推荐

    谈谈JavaScript中的几种借用方法

    在JavaScript中借用方法 在JavaScript中,有时可以重用其它对象的函数或方法,而不一定非得是对象本身或原型上定义的。通过 call()、apply() 和 bind() 方法,我们可轻易地借用其它对象的方法,而无须继承这些对象。...

    JavaScript模式中文[pdf] 百度云

     类式继承模式#3——借用和设置原型  类式继承模式#4——共享原型  类式继承模式#5——临时构造函数  Klass  原型继承  通过复制属性实现继承  借用方法  小结  第7章 设计模式  单体模式  工厂模式  ...

    JavaScript如何借用构造函数继承

    这篇文章主要介绍了JavaScript如何借用构造函数继承,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 借用构造函数继承是在子类型构造函数的内部调用超类型构造...

    JavaScript教程源代码

    JavaScript教程源代码JavaScript 初学者必读.里面函数很全的。可以直接借用。

    JavaScript模式 斯托扬·斯特凡洛夫 著

    类式继承模式#3——借用和设置原型 类式继承模式#4——共享原型 类式继承模式#5——临时构造函数 Klass 原型继承 通过复制属性实现继承 借用方法 小结 第7章 设计模式 单体模式 工厂模式 迭代器模式 装饰者模式 策略...

    javascript中call apply 与 bind方法详解

    在JavaScript中,call、apply和bind是Function对象自带的三个方法,本文将通过几个场景的应用,来详细理解三个方法。 call() call() 方法在使用一个指定的this值和若干个指定的参数值的前提下调用某个函数或方法。 ...

    富有表现力的JavaScript

    从中你可以体会到,这种语言允许你用各种方式完成同样的任务,还允许你在面向对象编程的过程中借用函数式编程中的概念来丰富其实现方式。本章解释了究竟为什么应该使用设计模式,以及它们在JavaScript程序设计的运用...

    JavaScript类的继承方法小结【组合继承分析】

    本文实例讲述了JavaScript类的继承方法。分享给大家供大家参考,具体如下: 在JavaScript 里,被继承的函数称为超类型(父类,基类也行,其他语言叫法),继承的函数称为子类型(子类,派生类)。继承也有之前问题,比如...

    简单谈谈javascript代码复用模式

    javascript的非类式继承(可称为现代继承模式)复用方法也很多,例如,利用其它对象组合成所需要的对象,对象混入技术,借用和复用所需要的方法。 类式继承模式-默认模式 两个构造函数Parent和Child的例子: 代码...

    js权威指南学习例子

    js权威指南学习例子,自己写的,有注释,还没有全部完成

    JavaScript继承基础讲解(原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承)

     JavaScript中实现继承最简单的方式就是使用原型链,将子类型的原型指向父类型的实例即可,即“子类型.prototype = new 父类型();”,实现方法如下: // 为父类型创建构造函数 function SuperType() { thi

    作为前端,你需要懂得javascript实现继承的方法

    在ES6之前,javascript不跟其他语言一样,有直接继承的方法,它需要借助于构造函数+原型对象模拟实现继承。现在我们可以利用ES6的extends方法实现继承,如果想了解更多有关ES6实现的继承请查看《ES6学习笔记(二):...

    Json+javascript歌曲清单源码

    Json+javascript歌曲清单源码 项目介绍: 1.服务器接受请求 后台一般处理程序,将音乐文件夹里, 音乐信息转换问Json字符串发送到客户端; 2.客户端将字符串转换为Json对象,将其绑定到页面上; 3.借用雅虎的播放器插件,将...

    javascript 中的继承实例详解

    javascript 中的继承实例详解 阅读目录 原型链继承 借用构造函数 组合继承 寄生组合式继承 后记 继承有两种方式:接口继承和实现继承。接口继承只继承方法签名,而实现继承则继承实际的方法。 由于函数没有签名...

    【JavaScript源代码】深入JS继承.docx

     目录 前言准备总结继承的n种方式原型式继承原型链式继承借用构造函数(类式继承)组合继承寄生组合式继承结束语 前言 准备 总结 继承的n种方式 原型式继承原型链式继承借用构造函数(类式继承)组合继承寄生组合...

    JavaScript中使用构造函数实现继承的代码

    JavaScript中借用构造函数实现继承的代码,需要的朋友可以参考下。

    JavaScript面向对象框架dejavu.js.zip

    dejavu 主要特性:类(具体的、抽象的、final类)接口混入(这样你可以使用某种形式的多重继承)私有成员和受保护成员静态成员常量函数上下文绑定方法签名检查扩展和借用vanilla类自定义instanceOf,支持接口两个...

Global site tag (gtag.js) - Google Analytics