【转】JavaScript里的this指针

情形一:传入的参数是函数的别名,那么函数的this就是指向window

情形二:传入的参数是被new过的构造函数,那么this就是指向实例化的对象本身;

情形三:如果我们想把被传入的函数对象里this的指针指向外部字面量定义的对象,那么我们就是用apply和call

我们可以通过代码看出我的结论,代码如下:

<script type="text/javascript">
var name = "I am window";
var obj = {
    name:"sharpxiajun",
    job:"Software",
    ftn01:function(obj){
        obj.show();
    },
    ftn02:function(ftn){
        ftn();
    },
    ftn03:function(ftn){
        ftn.call(this);//Call和apply是将this指针指向方法的第一个参数
    }
};
function Person(name){
    this.name = name;
    this.show = function(){
        console.log("姓名:" + this.name);
        console.log(this);
    }
}
var p = new Person("Person");
obj.ftn01(p);
obj.ftn02(function(){
   console.log(this.name);
   console.log(this);
});
obj.ftn03(function(){
    console.log(this.name);
    console.log(this);
});
</script>

结果如下:

最后再总结一下:

如果在javascript语言里没有通过new(包括对象字面量定义)、call和apply改变函数的this指针,函数的this指针都是指向window

时间: 2024-10-17 14:35:17

【转】JavaScript里的this指针的相关文章

谈谈我对javaScript里prototype的看法

javaScript创建每一个函数fn时,都会有一个ptototype属性,这个prototype其实就是一个指针,而这个指针总指向一 个原型对象,这个原型对象的用途就是将特定的属性或者方法包含在自己内部,从而实现了一个所有实例共享的作用. 什么?你还不明白,好吧!我简单来给你解释下吧,在解惑时,我得先让你跟着我的思路理一下.不然你会不知道我 在说什么了. 万物皆对象,好色如狼的我很自然地把女孩当成一个对象即javaScript里的一个Function,说白了就是我把女孩这比喻 成javaSri

JavaScript里关于声明的一些重要概念

所有的全局变量都是window的属性,在函数体外定义的var a=1等价于window.a=1: 所有的变量声明都在范围作用域的顶部,因为JS引擎首先会扫描所有的变量声明,然后将这些声明移动到顶部: 变量声明被提前了,变量赋值却没有.当变量声明和变量赋值一起使用时,JS引擎会自动将它分为两部分,以便将变量声明提前,不将赋值提前是因为可能影响代码执行出不可预期的结果: 函数声明也是提前的,所有的函数声明都在执行代码之前都已经完成了声明,和变量声明一样.但函数表达式不会提前,相当于变量赋值: 函数声

javascript里for循环的一些事情

今天在给一个学妹调她的代码BUG时,她的问题就是在一个for循环里不清楚流程的具体流向,所以导致了页面怎么调都是有问题,嗯确实你如果不清楚语句流向很轻易就会出问题,所以说for循环不会用或者说用的不恰当还是很可怕的.我也借此机会顺带复习了一下javascript里的for()循环.翻出了自己以前关于for循环的一些笔记,有些内容跃然浮于脑海中,以下大部分来自很久之前的笔记,可能会有一部分来自于网上其他优秀博客的内容. for循环里共有三个流程语句,这三个部分之间用";"分开.第一个是一

JavaScript里call,apply,bind方法简介

JavaScript里call,apply,bind方法不太容易理解,其实背后的思想并不算非常复杂,希望本文能帮你更好地了解这3个很像,而且看似很神秘的方法. 非要用一个关键字来点明它们的背后思想的精髓的话,关键字就是:this 因为通常程序员对C++比较熟,先借用C++,简单说一下this. 类的成员函数里,都可以用this来访问当前类的成员,但问题是成员函数的参数并没有this这个参数,比如: Animal a; a.eat(); a.eat("meat"); Animal的对象调

javascript里用php

<script type="text/javascript" > <?php if (!empty($searchResult)):?> $.searchModule.init({display:<?php echo MAX_KEYWORDS_DISPLAY_COUNT; ?>, mode:<?php echo $searchResult->mode; ?>, query:'<?php echo (isset($keyword

外部引用css属性在Javascript里如何获取

今天做封装一个库的时候发现:想获取节点的CSS属性,如果没有写行内style样式,而是通过link写的,我们在javascript里想要通过.style.属性,是获取不到的. 在网上查找了一下,W3C下提供了一个方法:window.getComputedStyle()可以得到节点的计算后样式,该方法有两个参数,第一个是要所要获取的样式的节点,第二个参数不知道是什么作用,网上给出的例子都将设置成null:即是这样调用的:window.getComputedStyle(node,null),其返回值

有关javascript 里的Math的使用.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head>     <title>Untitled Page<

javascript里的继承

js里面继承的方式, 1. 类式继承,通过构造函数的继承 1 function extend(subClass, superClass){ 2 var F = function(){}; 3 F.prototype = superClass.prototype; 4 subClass.prototype = new F(); 5 subClass.prototype.constructor = subClass; 6 7 subClass.superclass = superClass.prot

(转)详解Javascript 中的this指针

前言 Javascript是一门基于对象的动态语言,也就是说,所有东西都是对象,一个很典型的例子就是函数也被视为普通的对象.Javascript可以通过一定的设计模式来实现面向对象的编程,其中this “指针”就是实现面向对象的一个很重要的特性.但是this也是Javascript中一个非常容易理解错,进而用错的特性.特别是对于接触静态语言比较久了的同志来说更是如此. 示例说明 我们先来看一个最简单的示例: <script type="text/javascript"> v