看完这几个下例子,会对学习js有所帮助
1、小猫和小狗

  1. function food(){}
  2. food.prototype={
  3. food:'fish',
  4. say:function(){
  5. console.log('i love '+this.food);
  6. }
  7. }
  8. var blackCat=new food();
  9. blackCat.say();
  10.  
  11. //blackCat会说,i love fish
  12.  
  13. //如果又来了一只小狗,小狗喜欢吃骨头,但又不想改变food的方法
  14. var dog={food:'boon'};
  15. blackCat.say.call(dog);
  16.  
  17. //那么小狗就会说,i love boon

2、我想要什么动物就要什么动物

  1. function Animal() { //是什么小动物就叫什么名字
  2. this.showName = function() {
  3. console.log(this.name);
  4. }
  5. }
  6.  
  7. function Person(name) {
  8. this.name = null;
  9. this.Init = function(name) {
  10. this.name = name;
  11. }
  12. this.Init(name);
  13. };
  14.  
  15. var nameShowing = new Animal();
  16. var dark = new Person("我是小鸭"); //想生产什么就生产什么
  17. var chick = new Person("我是小鸡"); //想生产什么就生产什么
  18. nameShowing.showName.call(dark); //我是小鸭
  19. nameShowing.showName.call(chick); //我是小鸡

比较上面的方法,一锅端的方式,全部继承,本质一样

  1. function Animal() { //是什么小动物就叫什么名字
  2. this.showName = function() {
  3. console.log(this.name);
  4. }
  5. }
  6.  
  7. function Person(name) {
  8. this.name = null;
  9. this.Init = function(name) {
  10. this.name = name;
  11. }
  12. this.Init(name);
  13. };
  14.  
  15. /* var nameShowing = new Animal();
  16. var chick = new Person("我是小鸭子"); //想生产什么就生产什么
  17. nameShowing.showName.call(chick); //我是小鸭*/
  18.  
  19. var chick = new Person("我是小鸭子");
  20. Animal.call(chick);
  21. chick.showName(); //我是小鸭子

3、用一个空对象来模仿

  1. function Person(name, age){
  2. this.name = null;
  3. this.age = null;
  4. this.showPersonInfo = function(){
  5. document.write("Name: " + this.name + "<br>");
  6. document.write("Age: " + this.age + "<br>");
  7. };
  8. this.Init = function(){
  9. this.name = name;
  10. this.age = age;
  11. };
  12. this.Init();
  13. this.aaa=123;
  14. }
  15.  
  16. var animal = new Object();
  17. Person.call(animal, "小鸭子", 18); //animal具有了animal的属性和方法,不包含原型中的

4、实现继承,之前已经写过了,这里就不写了

5、借用其他对象的方法

  1. //判断是否是一个数组
  2. var s=[1,2,3];
  3. Object.prototype.toString.call(s);
  4. //"[object Array]"
  1. //利用Math.max来取数组最大值
  2. Math.max.apply(null,[1,2,5]) //
  1. //借用Array.prototype对象上的方法,往arguments中添加一个新的元素,通常会借用Array.prototye.push方法
  2. (function(){
  3. Array.prototype.push.call(arguments,3)
  4. console.log(arguments)
  5. })(1,2) //[1,2,3]
  1. //利用数组push方法,把任意对象传入值 Array.prototype.push
  2. var a={};
  3. Array.prototype.push.call(a,"frist");
  4. a[0]; //frish
  5. a.length; //
  1. //借用Array.prototype.slice方法,把arguments转成真正的数组
  2. (function(){
  3. Array.prototype.slice.call(arguments)
  4. console.log(arguments)
  5. })(1,2) //[1,2]
  1. //截去arguments列表的头一个元素,可以借用Array.prototype.shift方法
  2. (function(){
  3. Array.prototype.shift.call(arguments)
  4. console.log(arguments)
  5. })(1,2) //[2]

@

call经常用到的地方的更多相关文章

  1. 解决VS2008在win7找不到输入序列号的地方

    1.VS2008在Windows7 打开维护界面看不到可以输序列号的地方. 因为微软把他隐藏了. 2.我们可以借用工具把他显示出来 下载地址:http://www.zlsoft.com/techbbs ...

  2. 使用Google Closure Compiler高级压缩Javascript代码注意的几个地方

    介绍 GCC(Google Closure Compiler)是由谷歌发布的Js代码压缩编译工具.它可以做到分析Js的代码,移除不需要的代码(dead code),并且去重写它,最后再进行压缩. 三种 ...

  3. eclipse项目上面有个红叉,但是没有任何地方有错误

    eclipse项目上面有个红叉,但是没有任何地方有错误,clear,refresh,重启都试过了,依然没用, 后来我换了一个workspace,编译的时候提示: Description Resourc ...

  4. javascript中的一些核心知识点以及需要注意的地方

    前言 近期杂事甚多,这些事情的积累对知识体系的提升有好处,但是却不能整理出来,也整理不出来 比如说我最近研究的Hybrid在线联调方案便过于依赖于业务,就算分享也不会有人读懂,若是抽一点来分享又意义不 ...

  5. android 实现点击listview 空白地方隐藏菜单

    思路:重写ListView的setOnTouchListener事件: ListView.setOnTouchListener(new OnTouchListener(){ @Override pub ...

  6. java 将一张图片拷贝到另外一个地方。(IO流)

    package com.beiwo.inputstream; import java.io.FileInputStream; import java.io.FileOutputStream; impo ...

  7. 屌丝程序员的梦想 (二) 屌丝IT梦开始地方

    校区的周围有很多的网吧,一个对电子游戏迷恋了许久的青少年来说,那绝对是不可不去的地方,键盘,鼠标,显示器,那一切看起来都那么完美,那么似曾相识,是啊,魂牵梦绕的IT梦...哦..当时那只是电子游戏梦. ...

  8. es6还欠完善的地方

    const的可变性 const用于声明常量. 什么是常量,声明后的值不可更改. 对于值类型,比如string,number等等.const声明确实有效. const str = "strin ...

  9. js平滑滚动到顶部,底部,指定地方

    [原文链接] 采用锚点进行页面中的跳转的确很方便,但是要想增加网页的效果,可以使用jquery中的animate,实现滚动的一个动作,慢慢的滚动到你想跳转到的位置,从而看起来会非常高大上. [示例演示 ...

  10. Matlab中fread函数的高级使用方法及其帮助文档中容易引起歧义的地方

    参考资料:http://cn.mathworks.com/help/matlab/ref/fread.html 注意:参考资料针对的Matlab版本号R2015a,我使用的是R2013b. Matla ...

随机推荐

  1. XE2 泛型练习1

    要引用单元 System.Generics.Collections implementation {$R *.dfm}var i: Integer; str: string; procedure TF ...

  2. self.automaticallyAdjustsScrollViewInsets

    导航视图内Push进来的以“TableView”(没有ScrollView截图,就将就一下)为主View的视图,本来我们的cell是放在(0,0)的位置上的,但是考虑到导航栏.状态栏会挡住后面的主视图 ...

  3. CSS生僻问题一网打尽

    CSS生僻问题一网打尽 伪类和伪元素 伪类 何为伪类? 像类不是类,不是自己声明的类(不写样式也存在). 对伪元素的认识在早期网页上的超链接.链接(锚啊)用下划线标出来,点击后链接变紫色,鼠标悬上去变 ...

  4. BZOJ1098: [POI2007]办公楼biu

    从问题可以看出是求补图的连通块及点数 但补图太大.所以考虑缩小规模. 当一个点归属于一个连通块后,它以后就不需要了.所以可以用链表,删去这个点,也就减小了规模. 一个点开始bfs,每个点只会进队一次, ...

  5. Java关键字

    Java关键字简介 类别 关键字 说明 访问控制 private 私有的 protected 受保护的 public 公共的 类.方法和变量修饰符 abstract 声明抽象 class 类 exte ...

  6. java 对象输入输出流

    对象的输入输出流的作用: 用于写入对象 的信息读取对象的信息. 对象的持久化. 比如:用户信息.              ObjectInputStream   : 对象输入流            ...

  7. Daily Scrum02 12.07

    最近大家都在赶编译的大作业,没日没夜的码代码,调试,大家都很辛苦,但是,我们团队的工作,大家也不能懈怠啊! 大家要顶住压力,加油努力啊! Member 任务进度 下一步工作 吴文会 就总结点进行汇报 ...

  8. 如何解决google ping不通的问题。

    1. 用http://ping.chinaz.com/ ping google的域名. 2. 会ping出很多ip,但是chinaz用的是测试网点去ping的,不是你本地宽带, 所以把ping出ip拷 ...

  9. 实战Java虚拟机之二“虚拟机的工作模式”

    今天开始实战Java虚拟机之二:“虚拟机的工作模式”. 总计有5个系列 实战Java虚拟机之一“堆溢出处理” 实战Java虚拟机之二“虚拟机的工作模式” 实战Java虚拟机之三“G1的新生代GC” 实 ...

  10. shape

    <?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http:/ ...