码迷,mamicode.com
首页 > 编程语言 > 详细

Jquery第四课 Javascript中this的用法

时间:2015-03-12 17:20:18      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:jquery   javascript   

this关键字的使用

在JavaScript中使用this关键字表示调用方法的对象,这与大部分面向对象语言是一样的。但是由于callapplybind等函数的影响,我们可以改变this所代指的对象。

  • 使用call或者apply调用的函数中,this代指传入的第一个参数对象,如果传入null或者undefined,则表示全局对象(window)。
  • 通过对象调用函数(方法),函数中的this表示调用该函数的对象。
  • 单独调用的函数中this表示全局对象。
var myObject = {
    sayHello: function() {
        console.log("Hi, my name is " + this.myName);
    },
    myName: "Rebecca"
};

var secondObject = {
    myName: "Colin"
};

myObject.sayHello();    //"Hi, my name is Rebecca"
myObject.sayHello.call(secondObject);   //"Hi, my name is Colin"
var myName = "the global object";
var sayHello = function() {
    console.log("Hi, my name is " + this.myName);
};
var myObject = {
    myName = "Rebecca"
};
var myObjectHello = sayHello.bind(myObject);

sayHello(); //"Hi, my name is the global object"
myObjectHello(); //"Hi, my name is Rebecca"

JavaScript可以在运行中为对象动态添加函数,这样也会导致this代指的对象发生变化。

var myName = "the global object";
var sayHello = function() {
    console.log("Hi, my name is " + this.myName);
};
var myObject = {
    myName: "Rebecca"
};
var secondObject = {
    myName: "Colin"
};

myObject.sayHello = sayHello;
secondObject.sayHello = sayHello;

sayHello(); //"Hi, my name is the global object"
myObject.sayHello(); //"Hi, my name is Rebecca"
secondObject.sayHello(); //"Hi, my name is Colin"

还有,不能直接给处于较深的名字空间的函数增加短引用,会导致this变为全局对象,但是可以对它所处的对象设置短引用。

var myNamespace = {
    myObject: {
        sayHello: function() {
            console.log("Hi, my name is " + this.name);
        },
        myName: "Rebecca"
    }
};

var hello  myNamespace.myObject.sayHello;
hello();    //"Hi, my name is undefined"

var obj = myNamespace.myObject;
obj.sayHello(); //"Hi, my name is Rebecca"

Tips

callapply的区别是,apply接收两个参数:this和函数的参数数组;而call的第一个参数为this,但是后面是函数的参数列表。

本文档由长沙戴维营教育整理。

Jquery第四课 Javascript中this的用法

标签:jquery   javascript   

原文地址:http://blog.csdn.net/diveinedu/article/details/44222107

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!