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

function food(){}
food.prototype={
food:'fish',
say:function(){
console.log('i love '+this.food);
}
}
var blackCat=new food();
blackCat.say(); //blackCat会说,i love fish //如果又来了一只小狗,小狗喜欢吃骨头,但又不想改变food的方法
var dog={food:'boon'};
blackCat.say.call(dog); //那么小狗就会说,i love boon

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

    function Animal() {                     //是什么小动物就叫什么名字
this.showName = function() {
console.log(this.name);
}
} function Person(name) {
this.name = null;
this.Init = function(name) {
this.name = name;
}
this.Init(name);
}; var nameShowing = new Animal();
var dark = new Person("我是小鸭"); //想生产什么就生产什么
var chick = new Person("我是小鸡"); //想生产什么就生产什么
nameShowing.showName.call(dark); //我是小鸭
nameShowing.showName.call(chick); //我是小鸡

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

    function Animal() {                     //是什么小动物就叫什么名字
this.showName = function() {
console.log(this.name);
}
} function Person(name) {
this.name = null;
this.Init = function(name) {
this.name = name;
}
this.Init(name);
}; /* var nameShowing = new Animal();
var chick = new Person("我是小鸭子"); //想生产什么就生产什么
nameShowing.showName.call(chick); //我是小鸭*/ var chick = new Person("我是小鸭子");
Animal.call(chick);
chick.showName(); //我是小鸭子

3、用一个空对象来模仿

    function Person(name, age){
this.name = null;
this.age = null;
this.showPersonInfo = function(){
document.write("Name: " + this.name + "<br>");
document.write("Age: " + this.age + "<br>");
};
this.Init = function(){
this.name = name;
this.age = age;
};
this.Init();
this.aaa=123;
} var animal = new Object();
Person.call(animal, "小鸭子", 18); //animal具有了animal的属性和方法,不包含原型中的

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

5、借用其他对象的方法

//判断是否是一个数组
var s=[1,2,3];
Object.prototype.toString.call(s);
//"[object Array]"
//利用Math.max来取数组最大值
Math.max.apply(null,[1,2,5]) //
//借用Array.prototype对象上的方法,往arguments中添加一个新的元素,通常会借用Array.prototye.push方法
(function(){
Array.prototype.push.call(arguments,3)
console.log(arguments)
})(1,2) //[1,2,3]
//利用数组push方法,把任意对象传入值 Array.prototype.push
var a={};
Array.prototype.push.call(a,"frist");
a[0]; //frish
a.length; //
//借用Array.prototype.slice方法,把arguments转成真正的数组
(function(){
Array.prototype.slice.call(arguments)
console.log(arguments)
})(1,2) //[1,2]
//截去arguments列表的头一个元素,可以借用Array.prototype.shift方法
(function(){
Array.prototype.shift.call(arguments)
console.log(arguments)
})(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. Java -> 把Excel表格中的数据写入数据库与从数据库中读出到本地 (未完善)

    写入:没有关闭流,容错并不完善. private void insertFile(HttpServletRequest request, HttpServletResponse response) t ...

  2. 【BZOJ】3542: DZY Loves March

    题意 \(m * m\)的网格,有\(n\)个点.\(t\)个询问:操作一:第\(x\)个点向四个方向移动了\(d\)个单位.操作二:询问同行同列其他点到这个点的曼哈顿距离和.强制在线.(\(n \l ...

  3. Django分析之国际化处理

    最近在公司终于开始做web开发了,本以为会是简单的首页之类的小规模项目,结果上来就是一个处理大数据分析的项目,一个关于油品分析的系统,不过我接到的第一个任务是做这个网站的国际化处理,虽然项目还没有上线 ...

  4. chrome浏览器 模拟访问移动端

    谷歌Chrome浏览器,可以很方便地用来当3G手机模拟器.在Windows的[开始]-->[运行]中输入以下命令,启动谷歌浏览器,即可模拟相应手机的浏览器去访问3G手机网页: 谷歌Android ...

  5. Linux:使用nohup让进程在后台可靠运行

    学习之余我最大的乐趣是找一部不错的电影慢慢品味,这也是我缓解压力的最好方式之一,由于我常去的字幕组网站需要签到才可以下载字幕,像这种娱乐网站谁有时间天天记得去签到呢,but作为一个准程序猿应该有更好的 ...

  6. WM_COPYDATA进程间通信方案

    连续在两个公司使用WM_COPYDATA实现进程间通信了,整理一下 具体步骤: 一.   进程A通过ShellExecute启动进程B, 将用于通信的窗口句柄hWndA(已强转为int值)通过命令行参 ...

  7. Matlab的标记分水岭分割算法

    1 综述 Separating touching objects in an image is one of the more difficult image processing operation ...

  8. Linux Vim编辑器使用简单讲解

    在Linux中,主要编辑器为vi或者vim,本文围绕vim做简单的讲解说明:Linux默认自带vi(vim)编辑器,其程序包为:[root@linuxidc.com ~]# rpm -qf `whic ...

  9. 关于type erasure

    哇,好久没有写blog了,再不写的话,blog的秘密都要忘记了,嘿嘿. 最近在试着参与一个开源项目,名字叫avim(A Vibrate IM),别想多了哟.地址是:https://github.com ...

  10. /proc/sys/vm/参数

    1) /proc/sys/vm/block_dump该文件表示是否打开Block Debug模式,用于记录所有的读写及Dirty Block写回动作.缺省设置:0,禁用Block Debug模式2) ...