`
conkeyn
  • 浏览: 1522704 次
  • 性别: 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源代码】JavaScript继承的三种方法实例.docx

    在JavaScript中,虽然原生语言层面没有提供传统意义上的“类”这一概念,但它通过构造函数和原型链等机制实现了类的功能,尤其是继承这一核心概念。继承是面向对象编程的一个基本特征,它允许一个类(子类)继承另一...

    JavaScript模式中文[pdf] 百度云

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

    Reliable JavaScript

    书中还涵盖了JavaScript中的混入模式和方法借用,这些高级编程技巧能够让代码复用变得更加有效。 在测试方面,本书指导读者如何测试复杂的程序架构以及如何访问DOM。同时,还重点介绍了如何确保代码遵循标准规范,...

    javascript对象创建

    本文将深入探讨JavaScript中的对象创建方式,包括类和继承的概念。 首先,让我们从最基础的创建对象的方式开始。在JavaScript中,可以使用字面量语法来创建一个简单的对象: ```javascript var obj = { name: '...

    【JavaScript源代码】javascript类数组的深入理解.docx

    JavaScript中的类数组对象,也称为伪数组,是与标准数组类似但不完全符合数组特性的对象。它们在结构上相似,具有`length`属性,可以使用`for`循环进行遍历,但不拥有数组的内置方法,比如`push`, `slice`, `concat`...

    The Principles of Object Oriented.JavaScript

    - **构造函数继承**:在子类构造函数中调用父类构造函数,通过借用构造函数的方式继承父类的属性和方法。 #### 六、JavaScript中的多态 多态是指同样的方法在不同对象上表现不同的行为。在JavaScript中,多态可以...

    第15章 javascript面向对象与原型

    在JavaScript中,面向对象编程(OOP)的概念虽然存在,但是它的实现与传统基于类的语言有所不同。ECMAScript,也就是JavaScript的语言规范,支持两种开发模式:函数式(过程化)和面向对象(OOP)。面向对象编程语言...

    精通javascript设计模式en版pdf

    **构造函数模式**是JavaScript中的核心概念,它允许我们创建具有特定属性和方法的对象。然而,简单的构造函数不能实现继承,因此书中详细探讨了如何通过原型链、借用构造函数和组合使用这两种方式来实现**继承**。 ...

    JavaScript如何借用构造函数继承

    在JavaScript中,继承是面向对象编程的一个核心概念,它允许我们创建具有新特性的对象,同时保持原有对象的属性和方法。传统的继承模式包括原型链继承、构造函数继承(也称为经典继承)等。而借用构造函数继承(也...

    动态语言与JavaScript中文帮助文档

    7. **ES6及后续版本的新特性**:ECMAScript(ES)是JavaScript的标准,ES6(也称ES2015)引入了类、箭头函数、模板字符串、解构赋值等新特性。后续的ES7、ES8等版本继续增加了更多的功能,如async/await、Promise....

    前端开发必备JavaScript(含源码课件笔记总结)

    JavaScript是基于原型的面向对象语言,你需要了解构造函数、原型链、对象属性与方法、继承机制(原型链继承、借用构造函数、组合继承、寄生组合继承、原型式继承、ES6的类)。此外,还要掌握闭包和作用域,这是...

    精通javascript 源代码

    8. **ES6及以后的新特性**:包括箭头函数、模板字符串、解构赋值、类(class)、模块(import/export)、生成器(generator)和async/await等,这些都是现代JavaScript开发的重要组成部分。 9. **前端框架与库**:...

    javascript教案

    JavaScript是由Netscape公司的Brendan Eich在1995年开发的,最初被命名为Mocha,后来更名为LiveScript,最终在Netscape Navigator浏览器中发布时命名为JavaScript,以借用当时流行的Java语言的名气。尽管名字相似,...

    javascript面向对象要点总结

    一种实现继承的方式是通过构造函数的调用来“借用”另一个构造函数的属性和方法。 ```javascript function classA(name) { this.name = name; this.sayHello = function() { alert(this.name); } } function ...

    JavaScript权威指南(第6版)

    后来,为了借用Java的知名度,改名为JavaScript,但与Java并无直接关系。它是一种解释型、弱类型、基于原型的语言,支持事件驱动、函数式和面向对象的编程风格。 本书的第6版涵盖了以下关键知识点: 1. **基础语法...

    js权威指南学习例子

    4. 函数:JavaScript中的函数是第一类对象,可以作为参数传递,也可以作为其他函数的返回值。函数表达式和函数声明是两种不同的定义方式。 5. 对象:JavaScript的对象是基于哈希表的键值对集合,可以通过字面量语法...

    javaScript 内核解析

    JavaScript的诞生源于20世纪90年代,网景公司(Netscape)为了解决网页静态性的局限,开发了Mocha,后来演变为LiveScript,最终因市场策略更名为JavaScript,以借用Java的知名度。尽管名字相似,但JavaScript与Java...

Global site tag (gtag.js) - Google Analytics