看完这几个下例子,会对学习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. Spring--通过注解来配置bean【转】

    Spring通过注解配置bean 基于注解配置bean 基于注解来配置bean的属性在classpath中扫描组件 组件扫描(component scanning):Spring能够从classpat ...

  2. 循环遍历DataTable绑定到Table

    VoteList2.cs: using System; using System.Collections.Generic; using System.Linq; using System.Web; u ...

  3. [MySQL]使用Begin...End语句的一个坑

    写一个触发器,执行单条语句是OK的. 想执行多条语句,尝试在代码中加入BEGIN END.但一加BEGIN END就报错, 错误信息也很诡异,只说某一行出错了,不符合Mysql的语句规范,提示信息就个 ...

  4. [NOIP2012]借教室 题解

    题目大意: 有一个n个数的数列,m个操作,第i个操作使[li,ri]区间建di,问第几个操作使数列中出现负数. 思路: 暴力显然过不了,那么就可以优化了,不难想到线段树,显然需要良好的姿势,那么就差分 ...

  5. Leetcode First Missing Positive

    Given an unsorted integer array, find the first missing positive integer. For example,Given [1,2,0]  ...

  6. ZeroMQ接口函数之 :zmq_sendmsg – 从一个socket上发送一个消息帧

    ZeroMQ 官方地址 :http://api.zeromq.org/4-1:zmq-sendmsg zmq_sendmsg(3)        ØMQ Manual - ØMQ/4.1.0 Name ...

  7. 堆排序 Heapsort

    Prime + Heap 简直神了 时间优化好多,顺便就把Heapsort给撸了一发 具体看图 Heapsort利用完全二叉树+大(小)顶锥的结构每次将锥定元素和锥最末尾的元素交换 同时大(小)顶锥元 ...

  8. crontab中执行任务定位到秒级

    每秒执行一次: * * * * * /bin/sleep 1 ; echo "1"

  9. 错误Batch update returned unexpected row count from update [0]; actual row count: 0;

    参考:http://blog.csdn.net/ssyan/article/details/7471343 也是出现类似问题,在前台页面的隐藏域中判断id是否为null,而没有去判断是否为空字符串. ...

  10. IE8浏览器不能识别CSS伪类的解决办法。

    1. 方法一:开头加上这两句 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "htt ...