函数的四种存在形态:
1.函数形态
2.方法形态 将函数赋值给某一个对象的成员,那么就称为方法
3.构造器形态
4.上下文形态
 
1.函数形态:
var foo = function() {
    alert(this);             //this是window
};
2.方法形态:
o = {};
o.foo = foo;    //将函数foo赋值给对象o的foo属性
o.foo();        //弹出的是object,此时的this表示object
 var lib = {
    test:function() {
        alert(this);         //此处的this表示object(lib对象本身)
        //var that = this;   //要想匿名函数中this表示lib对象,可以这样
        (function() {
          alert(this);       //此处的匿名函数不属于lib对象,所以this的任然表示window
        })();
    }
};
lib.test();



3.构造器(构造函数)var p = new Person();1、new创建了对象,并开辟了空间2、将对象的引用地址传递给函数,在函数中用this接收3、构造方法执行结束,返回this
var Person = function() {
    this.age = 19;
    this.name = "Mr靖";
    return "{}";
};

var p = new Person();
alert(p.name);   //弹出的是undefined,由于函数返回的是一个对象,所以直接将这个对象返回给person,而忽略age,name属性
var Person = function() {
    this.age = 19;
    this.name = "Mr靖";
    return 123;
};

var p = new Person();
alert(p.name);      //弹出“Mr靖”,由于返回值不是对象,所以直接忽略返回值
alert(p);            //弹出object
改变的东西有:构造函数改变了函数的返回值;如果函数的返回值是一个对象,那么就按照返回值来返回;如果返回值不是一个对象就忽略返回值,直接返回this;

4.上下文调用模式函数.apply(对象, [参数列表])
var foo1 = function(a, b) {
    alert(this);
    return a > b ? a : b;
};
var num = foo1.apply(null, [112, 34]);     //此时foo1是函数形态,this表示window
num = foo1.apply({}, [112, 34]);           //此时foo1是方法形态,this表示参数中传入的对象{}
函数.call(对象, 参数列表);
var num1 =foo1.call(null,112,34);
num1=foo1.call({},112,34);            //除了参数列表外,其余和apply一样
 
 

最新文章

  1. struts2 拦截器
  2. 转载:第二弹!全球首个微信小程序(应用号)开发教程!通宵吐血赶稿!每日更新!
  3. 简单计算器--hdu1237(栈的运用)
  4. saiku-添加数据源以及保证数据源的一致性
  5. 记一次web项目总结
  6. 黄聪:Discuz!X/数据库操作方法、DB::table、C::t
  7. Loadrunner 添加windows资源没反应
  8. 格式化输出[parts/iomanip]
  9. 第二节 hibernate session介绍以及session常用方法介绍
  10. ORA-15025: could not open disk 处理
  11. Computer Science 学习第四章--CPU 指令集和指令处理
  12. VB.NET调用SQL Sever存储过程
  13. 苹果4S
  14. SQL2012还原数据库操作在本地服务器上操作和用别的电脑远程连接到服务器进行操作的文件路径差异
  15. npm 项目更换目录后无法启动
  16. js中的深拷贝与浅拷贝
  17. 优化TestNG测试报告
  18. HTML: Dom event
  19. get、post的区别
  20. python 和 scikit-learn 实现垃圾邮件过滤

热门文章

  1. info.plist 属性讲解
  2. 10071 - Back to High School Physics
  3. 十六进制字符串转化为byte数组
  4. 【POJ1113】Wall(凸包)
  5. 使用bacula实现Linux的远程备份和还原
  6. mongodb exception in initAndListen: 12596 old lock file, terminating 解决方法
  7. NIOS中双CPU系统的构建
  8. HDOJ 2018 母牛的故事
  9. Windows Server 2008 网站访问PHP响应慢的解决方法
  10. HDU 4722 Good Numbers 2013年四川省赛题