之前一直不太清楚js的call,apply的作用是什么,直到看到了这篇博文

http://blog.csdn.net/myhahaxiao/article/details/6952321

   function Person(name,age)
{
this.name=name;
this.age=age;
} function Student(name,age,grade)
{
Person(name,age);
Person.call(this,name,age);
alert(window.name);
this.grade=grade;
}
var student=new Student("zhangsan",21,"一年级");
alert("name:"+student.name+"\n"+"age:"+student.age+"\n"+"grade:"+student.grade);

为什么用Person.call,而不是直接调用Person函数呢?直接用Person(name,age);这里给this赋值,this是window,最后window拥有了name跟age值;

原因是this的指向,函数作用域取决于定义它时所在的地方,而不是执行它时所在的地方。这里Person函数是在全局环境下定义的,所以this变成了window;

而Person.call(this,name,age);的作用是将Person函数的作用域变成了当前函数,所以最终生成的实例student拥有了name跟age值,所以call的作用是可以改变函数的作用域,下面这个例子也说明了这一点:

       var name="CC";
function Person(name)
{
alert(name);
} function Student()
{
var name="AA";
Person.call(this,name);
}
var student=new Student();

最终弹出的是AA!

至于apply的妙用可以参考链接。

call,apply学习小结的更多相关文章

  1. Git学习小结 ~ Lethe's Blog

    学习自https://www.liaoxuefeng.com/wiki/896043488029600 一.创建版本库 (1) git init 初始化一个Git仓库 (2)添加文件到Git仓库,分两 ...

  2. flex学习小结

    接触到flex一个多月了,今天做一个学习小结.如果有知识错误或者意见不同的地方.欢迎交流指教. 画外音:先说一下,我是怎么接触到flex布局的.对于正在学习的童鞋们,我建议大家没事可以逛逛网站,看看人 ...

  3. Python 学习小结

    python 学习小结 python 简明教程 1.python 文件 #!/etc/bin/python #coding=utf-8 2.main()函数 if __name__ == '__mai ...

  4. react学习小结(生命周期- 实例化时期 - 存在期- 销毁时期)

    react学习小结   本文是我学习react的阶段性小结,如果看官你是react资深玩家,那么还请就此打住移步他处,如果你想给一些建议和指导,那么还请轻拍~ 目前团队内对react的使用非常普遍,之 ...

  5. objective-c基础教程——学习小结

    objective-c基础教程——学习小结   提纲: 简介 与C语言相比要注意的地方 objective-c高级特性 开发工具介绍(cocoa 工具包的功能,框架,源文件组织:XCode使用介绍) ...

  6. pthread多线程编程的学习小结

    pthread多线程编程的学习小结  pthread 同步3种方法: 1 mutex 2 条件变量 3 读写锁:支持多个线程同时读,或者一个线程写     程序员必上的开发者服务平台 —— DevSt ...

  7. ExtJs学习笔记之学习小结LoginDemo

    ExtJs学习小结LoginDemo 1.示例:(登录界面) <!DOCTYPE html> <html> <head> <meta charset=&quo ...

  8. 点滴的积累---J2SE学习小结

    点滴的积累---J2SE学习小结 什么是J2SE J2SE就是Java2的标准版,主要用于桌面应用软件的编程:包括那些构成Java语言核心的类.比方:数据库连接.接口定义.输入/输出.网络编程. 学习 ...

  9. (转) Parameter estimation for text analysis 暨LDA学习小结

    Reading Note : Parameter estimation for text analysis 暨LDA学习小结 原文:http://www.xperseverance.net/blogs ...

随机推荐

  1. Ninject学习(一) - Dependency Injection By Hand

    大体上是把官网上的翻译下而已. http://www.ninject.90iogjkdcrorg/wiki.html Dependency Injection By Hand So what's Ni ...

  2. Python~字典

    if not isinstance(x, (int, float)): raise TypeError('bad operand type')   range() raw_input(‘birth’) ...

  3. curses.h的安装和使用

    gcc test.c -o test 用以上命令编译包含curses.h头文件的程序时会出现各种引用未定义的错误,并且已经安装了 kernel-devel ncurese-devel ncurese- ...

  4. 如何封装JS ----》JS设计模式《------ 封装与信息隐藏

    1. 封装与 信息隐藏之间的关系 实质是同一个概念的两种表达,信息隐藏式目的,二封装是借以达到目的的技术方法.封装是对象内部的数据表现形式和实现细节,要想访问封装过额对象中的数据,只有使用自己定义的操 ...

  5. 【linux】scp命令

    scp的作用是在不同主机之间传输文件. 用法: scp user@host:/path1 path2 说明: 把远程主机host中path1的内容拷贝到当前主机的path2 user是远程主机登陆用户 ...

  6. (转载)org.springframework.web.context.ContextLoaderListener

    http://www.yihaomen.com/article/java/471.htm 刚才手贱乱点了下,然后好像jar包不见了还是什么的,出现了这个错误,按照帖子说的,手动添加maven进去就好了

  7. 用while语句求1~100之和

    用while语句求1~100之和 public class Ex3_5 {    public static void main(String[] args){        int n=1,sum= ...

  8. 【Java EE 学习 75 上】【数据采集系统第七天】【二进制运算实现权限管理】【权限分析和设计】

    一.权限计算相关分析 1.如何存储权限 首先说一下权限保存的问题,一个系统中最多有多少权限呢?一个大的系统中可能有成百上千个权限需要管理.怎么保存这么多的权限?首先,我们使用一个数字中的一位保存一种权 ...

  9. Oracle sql连接

    inner-join                    left-outer-join                 right-outer-join                 full- ...

  10. RocksDB安装

    1.安装相关依赖软件 sudo apt-get install build-essential sudo apt-get install libsnappy-dev zlib1g-dev libbz2 ...