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 ...
随机推荐
- XE2 泛型练习1
要引用单元 System.Generics.Collections implementation {$R *.dfm}var i: Integer; str: string; procedure TF ...
- self.automaticallyAdjustsScrollViewInsets
导航视图内Push进来的以“TableView”(没有ScrollView截图,就将就一下)为主View的视图,本来我们的cell是放在(0,0)的位置上的,但是考虑到导航栏.状态栏会挡住后面的主视图 ...
- CSS生僻问题一网打尽
CSS生僻问题一网打尽 伪类和伪元素 伪类 何为伪类? 像类不是类,不是自己声明的类(不写样式也存在). 对伪元素的认识在早期网页上的超链接.链接(锚啊)用下划线标出来,点击后链接变紫色,鼠标悬上去变 ...
- BZOJ1098: [POI2007]办公楼biu
从问题可以看出是求补图的连通块及点数 但补图太大.所以考虑缩小规模. 当一个点归属于一个连通块后,它以后就不需要了.所以可以用链表,删去这个点,也就减小了规模. 一个点开始bfs,每个点只会进队一次, ...
- Java关键字
Java关键字简介 类别 关键字 说明 访问控制 private 私有的 protected 受保护的 public 公共的 类.方法和变量修饰符 abstract 声明抽象 class 类 exte ...
- java 对象输入输出流
对象的输入输出流的作用: 用于写入对象 的信息读取对象的信息. 对象的持久化. 比如:用户信息. ObjectInputStream : 对象输入流 ...
- Daily Scrum02 12.07
最近大家都在赶编译的大作业,没日没夜的码代码,调试,大家都很辛苦,但是,我们团队的工作,大家也不能懈怠啊! 大家要顶住压力,加油努力啊! Member 任务进度 下一步工作 吴文会 就总结点进行汇报 ...
- 如何解决google ping不通的问题。
1. 用http://ping.chinaz.com/ ping google的域名. 2. 会ping出很多ip,但是chinaz用的是测试网点去ping的,不是你本地宽带, 所以把ping出ip拷 ...
- 实战Java虚拟机之二“虚拟机的工作模式”
今天开始实战Java虚拟机之二:“虚拟机的工作模式”. 总计有5个系列 实战Java虚拟机之一“堆溢出处理” 实战Java虚拟机之二“虚拟机的工作模式” 实战Java虚拟机之三“G1的新生代GC” 实 ...
- shape
<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http:/ ...