call经常用到的地方
看完这几个下例子,会对学习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经常用到的地方的更多相关文章
- 解决VS2008在win7找不到输入序列号的地方
1.VS2008在Windows7 打开维护界面看不到可以输序列号的地方. 因为微软把他隐藏了. 2.我们可以借用工具把他显示出来 下载地址:http://www.zlsoft.com/techbbs ...
- 使用Google Closure Compiler高级压缩Javascript代码注意的几个地方
介绍 GCC(Google Closure Compiler)是由谷歌发布的Js代码压缩编译工具.它可以做到分析Js的代码,移除不需要的代码(dead code),并且去重写它,最后再进行压缩. 三种 ...
- eclipse项目上面有个红叉,但是没有任何地方有错误
eclipse项目上面有个红叉,但是没有任何地方有错误,clear,refresh,重启都试过了,依然没用, 后来我换了一个workspace,编译的时候提示: Description Resourc ...
- javascript中的一些核心知识点以及需要注意的地方
前言 近期杂事甚多,这些事情的积累对知识体系的提升有好处,但是却不能整理出来,也整理不出来 比如说我最近研究的Hybrid在线联调方案便过于依赖于业务,就算分享也不会有人读懂,若是抽一点来分享又意义不 ...
- android 实现点击listview 空白地方隐藏菜单
思路:重写ListView的setOnTouchListener事件: ListView.setOnTouchListener(new OnTouchListener(){ @Override pub ...
- java 将一张图片拷贝到另外一个地方。(IO流)
package com.beiwo.inputstream; import java.io.FileInputStream; import java.io.FileOutputStream; impo ...
- 屌丝程序员的梦想 (二) 屌丝IT梦开始地方
校区的周围有很多的网吧,一个对电子游戏迷恋了许久的青少年来说,那绝对是不可不去的地方,键盘,鼠标,显示器,那一切看起来都那么完美,那么似曾相识,是啊,魂牵梦绕的IT梦...哦..当时那只是电子游戏梦. ...
- es6还欠完善的地方
const的可变性 const用于声明常量. 什么是常量,声明后的值不可更改. 对于值类型,比如string,number等等.const声明确实有效. const str = "strin ...
- js平滑滚动到顶部,底部,指定地方
[原文链接] 采用锚点进行页面中的跳转的确很方便,但是要想增加网页的效果,可以使用jquery中的animate,实现滚动的一个动作,慢慢的滚动到你想跳转到的位置,从而看起来会非常高大上. [示例演示 ...
- Matlab中fread函数的高级使用方法及其帮助文档中容易引起歧义的地方
参考资料:http://cn.mathworks.com/help/matlab/ref/fread.html 注意:参考资料针对的Matlab版本号R2015a,我使用的是R2013b. Matla ...
随机推荐
- linux 下如何 makefile
本文目的: 尝试着把makefile讲解清楚.非原创,仅仅是学习笔记和备忘录之用. makefile 的目的和好处: 一个工程中的源文件不计数,其按类型.功能.模块分别放在若干个目录中,makefil ...
- Jquery AJAX ASP.NET IIS 跨域 超简单解决办法
第一种: 在IIS添加如下标头即可 Access-Control-Allow-Headers:Content-Type, api_key, AuthorizationAccess-Control-Al ...
- IntelliJ IDEA 14 注册码
IntelliJ IDEA 14 下载地址: IntelliJ IDEA 14 下载 分享几个license: (1) key:IDEA value:61156-YRN2M-5MNCN-NZ8D2-7 ...
- DIV的Position属性和DIV嵌套DIV
1.前言 我们在利用div+css进行布局时,常常被div的位置弄的焦头烂额,很多人甚至放弃了div而直接用table.这里一如既往的推荐使用div布局,其实我们只要掌握了div的position属性 ...
- DB2数据库参数建议(Linux)
内核参数配置: kernel.shmall=<物理内存的90%,以页为单位> kernel.shmax=<实际的物理内存> kernel.shmmni= kernel.msgm ...
- StringTemplate初步使用
例子1: private static void test_1(String[] args) throws Exception { ST hello = new ST("Hello, < ...
- HUAS_ACM 个人训练#2 C
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=117538#problem/C 题目大意:给出一个字符串,然后给出一系列的x,y ...
- STL之list
list是一个线性链表结构,它的数据由若干个节点构成,每一个节点都包括一个信息块,一个前驱指针和一个后驱指针.它无需分配指定的内存大小且可以任意伸缩,这是因为它存储在非连续的内存空间中,并且由指针将有 ...
- 最难面试的IT公司之ThoughtWorks代码挑战——FizzBuzzWhizz游戏
最近互联网招聘平台拉勾网在五一期间推出个“最难面试的IT公司”代码挑战活动,评选出了5个最难面试的IT公司,即:ThoughtWorks.Google.Unisys.Rackspace.Cypress ...
- canvas中的rotate的使用方法
今天在绘制一个足球滚动的时候,想使用rotate方法,之前看到这个方法的时候,并没有引起任何重视,无非就是和CSS3里的rotate一样的用么... 遗憾的是,事实并非如此,由于代码在公司,我也就不去 ...