zoukankan      html  css  js  c++  java
  • js 用call或prototype实现类的继承

    //call()
    //调用一个对象的一个方法,以另一个对象替换当前对象。
    //call([thisObj[,arg1[, arg2[,   [,.argN]]]]])
    //参数
    //thisObj 
    //可选项。将被用作当前对象的对象。 
    //arg1, arg2, , argN 
    //可选项。将被传递方法参数序列。 
    //说明
    //call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。
    //如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。
    
    
    function Person(name){    //父类
    	this.name=name;
    	this.SayHello=function(){alert("Hello, I'm "+this.name);};
    }
    function Employee(name,salary){   //子类
    	Person.call(this,name);       //将this传给父构造函数
    	this.salary=salary;
    	this.ShowMeTheMoney=function(){alert(this.name+" $"+this.salary);};
    }
    
    var BillGates=new Person("Bill Gates");
    var SteveJobs=new Employee("Steve Jobs",1234);
    
    BillGates.SayHello();  //显示:I'm Bill Gates
    SteveJobs.SayHello();  //显示:I'm Steve Jobs
    SteveJobs.ShowMeTheMoney();  //显示:Steve Jobs $1234
    
    alert(BillGates.constructor == Person);   //true
    alert(SteveJobs.constructor == Employee); //true 
    

    直接定义prototype似乎更有extends 的意韵

    function Person(name){    //父类
    	this.name=name;
    	this.SayHello=function(){alert("Hello, I'm "+this.name);};
    }
    function Employee(salary){   //子类
    	this.salary=salary;
    	this.ShowMeTheMoney=function(){alert(this.name+" $"+this.salary);};
    }
    Employee.prototype=new Person("Steve Jobs");
    var SteveJobs=new Employee(1234);
    
    SteveJobs.SayHello();  //显示:I'm Steve Jobs
    SteveJobs.ShowMeTheMoney();  //显示:Steve Jobs $1234
    

    注:这里的Person.call(this.name)就像super(this.name)一样,哥在java里都不太用,不过了解一下总是好的

  • 相关阅读:
    在ubuntu 12.04 x64下编译hadoop2.4
    Learn ZYNQ (9)
    Learn ZYNQ (8)
    Jquery 中 ajaxSubmit使用讲解(转)
    JSON.parse()和JSON.stringify()的区别
    $('div','li'),$('div , li'),$('div li')的区别
    用正则表达式来去除字符的前后空格
    git add 命令添加所有改动内容
    js基础知识
    Web开发学习笔记
  • 原文地址:https://www.cnblogs.com/frostbelt/p/2428014.html
Copyright © 2011-2022 走看看