<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>this.html</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta name="keywords" content="keyword1,keyword2,keyword3"> <meta name="description" content="this is my page"> <meta name="content-type" content="text/html; charset=UTF-8"> <!--<link rel="stylesheet" type="text/css" href="./styles.css">--> <script type="text/javascript" src="../js/jquery-1.11.3.js"></script> </head> <body> <div id="div"></div> <script type="text/javascript"> // <![CDATA[ //如果你需要在没有硬编码的window标识符下访问全局对象,你可以在任何层级的函数作用域中做如下操作: var global = (function () { return this; })(); function show(str) { $("#div").append($("<p></p>").text("" + str)); } //JavaScript 有一套完全不同于其它语言的对 this 的处理机制。 //在五种不同的情况下 ,this的指向各不相同。 //1、全局范围内:当在全局范围内使用 this,它将会指向全局对象global //浏览器中运行的 JavaScript 脚本,这个全局对象的属性是global.window = global show(global); //[object Window] //2、直接调用函数:这里 this 会指向全局对象。 //ES5 注意: 在严格模式下(strict mode),不存在全局变量。 这种情况下 this 将会是 undefined。 //function声明时相当于为全局添加了一个类型为Function的属性global.funName = function() {} function Test(name) { this.name = name; this.getName = function() { return this.name; }; } //这里相当于调用global.Test("jaeson"),this指向global,为global增加了两个成员变量。 Test("jaeson"); show(global.name); //jaeson show(getName()); //jaeson //3、点号方法调用:指向调用函数的对象。 //相当于声明了global.test1 = {name : "coolrice", getName : function() { return this.name; }} var test1 = new Test("coolrice"); //这里this指向test1对象 show(test1.getName()); //coolrice //4、调用构造函数:如果函数倾向于和 new 关键词一块使用,则我们称这个函数是构造函数。 在函数内部,this指向新创建的对象。 //5、显式的设置 this:当使用 Function.prototype 上的 call 或者 apply 方法时,函数内的 this 将会被显式设置为函数调用的第一个参数。 function foo() { this.name = "foo"; this.show = function() { show("foo.show=" + this.name); }; } function bar() { this.name = "bar"; this.show = function() { show("bar.show=" + this.name); }; } var foo1 = new foo(); var bar1 = new bar(); //this指向foo1 foo1.show(); //foo.show=foo //this指向foo1 bar1.show.call(foo1); //bar.show=foo //注意: 在对象的字面声明语法中,this 不能用来指向对象本身。 因此 var obj = {me: this} 中的 me 不会指向 obj, //因为 this 只可能出现在上述的五种情况中。这个例子中,如果是在浏览器中运行,obj.me 等于 global 对象。 var obj = {me: this}; show(obj.me); //[object Window] //常见误解: //尽管大部分的情况都说的过去,不过第二个规则(就是直接调用函数时,this 指向全局对象global) //被认为是JavaScript语言另一个错误设计的地方,因为它从来就没有实际的用途。 function TestMethod(name) { function method(name) { // this 将会被设置为全局对象(浏览器环境中也就是 window 对象) this.username = name; } method(name); } TestMethod.prototype.username="value from prototype"; TestMethod("chenzq"); show(global.username); //chenzq var testm = new TestMethod("jaesonchen"); //从原型链中获得值 show(testm.username ? testm.username : "undefined"); //value from prototype show(global.username); //jaesonchen //一个常见的误解是 method 中的 this 将会指向 TestMethod 对象,实际上不是这样子的。 //为了在 method 中获取对 TestMethod 对象的引用,我们需要在 method 函数内部创建一个局部变量that指向 TestMethod 对象。 //that这个名字被广泛的用来指向外部的 this 对象。 在 闭包 中,经常可以看到 that 可以作为参数传递。 function TestThat(name) { var that = this; function method(name) { // 使用 that 来指向 TestThat的对象 that.namethat = name; } method(name); } TestThat("name that"); show(global.namethat); //name that //这里this指向testt对象 var testt = new TestThat("new that"); show(testt.namethat); //new that show(global.namethat); //name that //另一个看起来奇怪的地方是函数别名,也就是将一个方法赋值给一个变量。 function TestAlias(name) { this.aliasName = name; this.getAliasName = function() { return this.aliasName; }; } var testa = new TestAlias("alias"); show(testa.getAliasName()); //alias //相当于global.func = function() { return this.aliasName; } //func 就像一个普通的函数被调用;因此,函数内的 this 将不再被指向到 testa 对象,而是global对象。 var func = testa.getAliasName; show(func()); //undefined //对于函数作为参数传递导致的this指针丢失的问题,目前很多框架都已经有方法解决了。 //Prototype的解决方案——传参之前使用bind方法将函数封装起来,并返回封装后的对象 function bind() { if (arguments.length < 2 && arguments[0] === undefined) return this; var __method = this, args = $A(arguments), object = args.shift(); return function(){ return __method.apply(object, args.concat($A(arguments))); }; } // ]]> </script> </body> </html>
相关推荐
面向对象编程(Object-Oriented Programming,OOP)是编程的一种重要范式,JavaScript也完全支持这一特性,尽管它并非一种传统的静态类型语言。这篇博客文章可能详细讨论了如何在JavaScript中实现面向对象编程。 在...
11. **箭头函数Arrow Functions**: 箭头函数提供了一种更简洁的函数定义方式,其`this`值继承自父作用域,不绑定自己的`arguments`对象。 12. **Map 和 Set**: 这两种数据结构提供了更高效、灵活的键值对存储。Map...
### JavaScript面向对象编程精要 #### 一、引言 JavaScript是一种灵活且强大的脚本语言,它虽然起源于一种简单的浏览器脚本语言,但随着时间的发展,JavaScript已经成为了一种功能全面的编程语言,尤其是在Web开发...
### JavaScript面向对象进阶知识点详解 #### 8.1 面向对象编程的基本特性 在探讨面向对象的JavaScript之前,我们首先需要了解面向对象编程(Object-Oriented Programming, OOP)的基本特性:封装性、抽象性、继承...
### JavaScript面向对象编程详解 #### 一、引言 JavaScript作为一种广泛使用的脚本语言,在Web开发领域占据着举足轻重的地位。尽管JavaScript本质上是一种基于原型的语言,但它也支持面向对象编程的一些特性,使得...
在JavaScript中,创建对象是编程的基本操作之一,它支持多种方式来实现这一目的。这篇博客“javascript创建对象的方式(二)”可能详细介绍了在JavaScript中除了最基础的字面量语法之外的其他创建对象的方法。这里...
6. this关键字:在JavaScript中,this关键字用来引用当前执行上下文的对象。在构造函数、普通函数和箭头函数中,this的指向是不同的。理解this关键字有助于掌握JavaScript中对象的使用和方法的调用。 7. 高阶函数:...
JavaScript是一种广泛应用于Web开发的动态、弱类型的语言,它的面向对象编程能力是其核心特性之一。面向对象编程(Object-Oriented Programming,OOP)是一种编程范式,它基于“对象”的概念,允许程序员创建数据...
面向对象编程(Object-Oriented Programming,OOP)是JavaScript中的一个重要概念,它允许开发者以更加模块化、可复用的方式组织代码。下面将详细探讨JavaScript面向对象编程的基本原理、特性以及实际应用。 1. **...
在JavaScript中,对象转换成JSON(JavaScript Object Notation)是一种常见的数据交换格式,它轻量级、易读、易写,被广泛应用于Web应用程序之间传递数据。JSON格式是基于JavaScript的一个子集,但它并不是...
面向对象编程(Object-Oriented Programming,OOP)是JavaScript中的一个重要概念,它允许开发者通过对象来组织代码,提高可读性和可维护性。本指南的第二版深入探讨了JavaScript的面向对象特性,旨在帮助开发者更好...
在JavaScript中,面向对象编程(OOP)是其核心概念之一,允许开发者通过类和对象来组织和管理代码,提高代码的可重用性和可维护性。 8.1 面向对象术语 面向对象编程的基础包括类、对象、继承和多态等概念。类是对象...
### JavaScript面向对象精要 #### 一、概述 《JavaScript面向对象精要》是一本深入讲解JavaScript面向对象编程原理的专业书籍。本书由知名的前端开发者Nicholas C. Zakas撰写,全面介绍了JavaScript作为一种动态...
JavaScript是一种动态类型的脚本语言,虽然它不像Java或C#那样拥有传统的类和实例机制,但它的面向对象编程能力仍然非常强大。JavaScript的核心在于对象、原型和隐式继承,这些都是理解其面向对象特性的重要概念。 ...
javascript面向对象编程指南 2nd英文版,英文名:Object-Oriented JavaScript。 What you will learn from this book The basics of object-oriented programming, and how to apply it in the JavaScript ...
### JavaScript面向对象编程详解 #### 引言 在软件工程领域,面向对象编程(OOP)是一种编程范式,它使用“对象”来设计软件。每个对象都可以包含数据(属性)和方法(行为)。JavaScript虽然起初并非为面向对象...
JavaScript,作为一种广泛应用于Web开发的动态脚本语言,最初被设计为简单的客户端脚本语言,但随着技术的发展,它已经发展出了丰富的面向对象编程(OOP)特性。面向对象JavaScript开发是现代Web开发中不可或缺的一...
JavaScript对象是编程语言的核心组成部分,尤其在Web开发中扮演着至关重要的角色。"JavaScript对象参考手册"涵盖了这一主题的广泛内容,旨在为开发者提供全面、深入的理解和实用指南。手册分为20个章节,不仅涉及...