`
arest
  • 浏览: 21639 次
  • 性别: Icon_minigender_1
  • 来自: 南京
最近访客 更多访客>>
社区版块
存档分类
最新评论

JavaScript初学者最容易犯的错误(一)

 
阅读更多

欢迎访问 http://www.3body.tk/iblog

this指针的错误理解

在使用JavaScript做面向对象编程的时候,很多有基本面向对象概念的新手都会在不经意间将this指针指向了错误的位置而不自知。如下所示:

var Lily = function(id) {
    this.name = "lily";

    $("body").click(function() {
        $("#" + id).text(this.name + " is here!");
    });
}

上面的代码使用jquery的一些函数,本来的目的是在页面上点击时会在初始化Lily实例时传入的的元素上显示“lily is here”的文本。

但是如果运行这段代码你就会发现点击页面后显示的name为undefined,为什么this.name变成了未定义的变量呢? 此处正是由于this指针指向的对象发生了变化。

在JavaScript中无论何时,函数里的this都是指向这个函数的调用者。所以当运行到onclick事件的时候,由于触发的函数是绑定给body的,所以此时的this是指向body这个对象的,而body中并没有定义name属性,就会显示undefined。

上面是一个绑定监听事件的情形。同样的错误还容易出现在对象中使用setTimeout,设置callback进行回调, 使用全局函数等地方。

在JavaScript使用prototype实现的继承体系中,this指针指向函数的调用者这一特性也是在基类中设计抽象方法的关键。比如用JavaScript实现一个模板模式,在当子类通过调用父类的接口使用到基类中的抽象方法时,调用者是子类,所以当执行到this.abstractMethod()时,如果子类中覆写了此方法有自己具体的实现,就会执行子类的方法。

对于这个容易出现的错误只要在写代码时注意到哪些方法是有对象自身调用的,哪些方法是由外部对象,或全局对象调用的就可以避免。

有时候遇到对象找不到,未定义,或取值出现不正常的情况也要检查一下是不是当前的this指针与你认为的大相径庭了!

2013-3-18 22:48:20

分享到:
评论

相关推荐

    最容易犯的JavaScript错误.doc

    JavaScript是Web开发中不可或缺的一部分,但同时也是一种容易出错的语言,尤其对于初学者而言。以下是一些最常见的JavaScript错误及其解决方案: 1. **错误:for..in遍历数组** 当使用`for..in`循环遍历数组时,这...

    JavaScript入门经典(第4版) Beginning JavaScript

    - **常见编程错误**:列举了一些初学者容易犯的错误,并提供了解决方案。 - **调试技巧**:介绍了使用浏览器开发者工具进行调试的方法。 - **错误处理机制**:讲解了try-catch-finally语句的用法,以及如何通过异常...

    深入浅出JavaScript 4th.Edition(英文原版)

    本书《深入浅出JavaScript 4th.Edition(英文原版)》即为《Wrox.Beginning.JavaScript.4th.Edition.Oct.2009》,是针对初学者的一本详尽的JavaScript教程,由Paul Wilton和Jeremy McPeak共同编写。第四版在原有的基础...

    Web开发基础常见错误汇总

    这些错误都是初学者容易犯的错误,通过这些错误的总结和分析,初学者可以快速掌握编程的基本知识和技能。 知识点总结 1. 类名与源文件名不符的解决方法 分析:public 修饰的类名必须与源文件的名字相同,修改类名...

    再谈javascript常见错误及解决方法

    首先,错误的引号使用是JavaScript初学者常犯的一个错误。在JavaScript中,字符串可以用单引号(')或双引号(")来界定。然而,当属性值内嵌入引号时,很容易发生引号不匹配的错误。例如: 错误示例: ```html ("test...

    JCppEdit v4.0:最佳初学者IDE-开源

    JCppEdit是一个免费的“最佳初学者IDE”,并且是您一站式IDE,可满足您的所有编码需求。 无论您是需要完成Java项目还是提交第一个HTML网页,还是在Java程序中将Java程序执行到Java IDE中时是否需要用C语言编写代码,...

    Javascript调试脚本的经验之谈第1/2页

    例如,错误地使用引号、大括号或小括号是初学者容易犯的错误,但幸运的是,现代浏览器的JavaScript引擎能够自动检测到这些明显的语法错误,并给出提示。然而,一些不易察觉的错误,如变量名或函数名混淆、使用保留字...

    Extjs学习过程中新手容易碰到的低级错误积累

    对于Extjs的学习者来说,上述几个方面是初学者容易忽略或犯错的地方。通过本文的详细介绍,希望能帮助学习者们更好地理解这些问题,并在未来的开发过程中避免这些常见的低级错误。同时,建议在遇到问题时,积极查阅...

    程序员为什么还要刷题-typescript-summary:供初学者了解TS的简短摘要!

    成为容易犯错误的地方。 TS 负责编译(转译)代码,并为程序员提供更好的代码编写环境。 写作环境? 是的,当您想在浏览器上运行 TS 代码时,它最终会被转换为 JS。 看下面的例子: 左边是TS代码,右边是转译后的JS...

    first-bit:为开放源代码贡献自己的第一手

    尤其是在您进行协作时,犯错误并不是一件容易的事。 我们在希望简化新的开源贡献者首次学习和贡献的方式。 阅读文章和观看教程会有所帮助,但是,比在练习环境中实际完成工作更好的是什么? 因此,为了提供指导并...

    Node_App_Authentication:使用Cookie,会话和JWT对Node应用程序进行身份验证

    犯的错误之一是将POST与/ auth路由一起使用,但未正确设置正文解析器中间件,因此无法按护照中的预期获取表单数据,并且failRedirect不断被触发。 尝试制作一个简单的UI用于使用护照和会话进行身份验证。 使用...

    react_baby_steps:首先使用NodeJS和React进行Tipe!

    对于初学者,函数组件更容易理解,它们看起来像这样: ```typescript import React from 'react'; function App() { return ( <h1>Hello, React and TypeScript! ); } export default App; ``` 这里,...

Global site tag (gtag.js) - Google Analytics