美文网首页
JavaScript 面向对象(一)

JavaScript 面向对象(一)

作者: Vincent_Jiang | 来源:发表于2017-03-31 14:46 被阅读9次

this 关键字

this 指针所代表的是当前对象。但是,必须清楚的明确 当前对象 是哪个对象

<script type="text/javascript">

  /**
   * 页面加载时候由 JavaScript 引擎实例化了 window 对象
   * 页面上的各种元素全部处于该 window 对象之中
   * 此时 this 指针全部指向的是 window
   *
   */

  console.log(this); // window
  console.log(this.name); // undefined
  console.log(name); // undefined

  var name = "Lucy"; // 该变量是全局变量
  console.log(this.name); // "Lucy"

  console.log(this == window); // true
  console.log(this === window); // true

</script>
<script type="text/javascript">

  /**
   * this 指针指向的是实例化对象。
   * show() 方法是一个函数,它并不是一个对象,更提不上实例化。
   * 所以 this 指向的对象没有被改变,依然是 window。
   * this.name 自然也就是代码第一行中定义的 "Jack"。
   *
   */

  var name = "Jack"; // 全局变量

  function show(name) {
    console.log(name); // "Locy"
    console.log(this); // window
    console.log(this.name); // "Jack"
  }

  show("Locy");
</script>
<script type="text/javascript">

  /**
   * 此处 this 指向的已经不是 window 了,指向的都是 object 这个对象。
   * 因为 object 已经被实例化了,它是通过 new 关键字被实例化的。
   * 而它的 show 属性是一个方法,
   * 该方法中的 this 关键字自然指向的是已经被实例化的 object
   * object 被实例化的时候,this 已经由指向 window 变成了指向 object。
   *
   */

  var name = "Jack"; // 全局变量

  var object = new Object(); // 实例化一个对象
  object.name = "Locy"; // 声明对象 name 属性,并赋值为 "Locy"
  object.show = function () { // 声明对象 show 属性,并赋值为一个方法
    console.log(name); // "Jack"
    console.log(this); // Object {name: "Locy", show: function}
    console.log(this.name); // "Locy"
  };

  object.show(); // 调用方法
</script>
<script type="text/javascript">

  /**
   * 这种字面量方式定义对象和上面通过 new 关键字定义对象,本质上是一样的
   * 所以打印的结果也是一样的。
   *
   */

  var name = "Jack"; // 全局变量

  var object = {
    name: "Locy",
    show: function () {
      console.log(name); // "Jack"
      console.log(this); // Object {name: "Locy", show: function}
      console.log(this.name); // "Locy"
    }
  };

  object.show();
</script>
<script type="text/javascript">

  /**
   * 更清晰的表现方式
   * 定义一个方法,分别打印 this、name、this.name
   *
   */

  function show(name){
    console.log(this);
    console.log(name);
    console.log(this.name);
  }

  /**
   * 使用了 new 操作符,this 便指向了实例化的对象
   * 打印结果:show{} "Locy" undefined
   *
   */

  var locy = new show("Locy");

  /**
   * 没用实例化对象,只是引用了该方法而已,this 依然指向 window 对象
   * 打印结果:window{} "Jack" undefined
   *
   */

  var jack = show("Jack");
</script>

相关文章

  • JavaScript面向对象学习笔记

    @(JS技巧)[面向对象] JavaScript面向对象学习笔记 封装 Javascript是一种基于对象(obj...

  • JavaScript学习

    javascript面向对象 初学javascript,感觉javascript的面向对象编程还是很有意思的,在此...

  • javascript的面向对象

    javascript面向对象 初学javascript,感觉javascript的面向对象编程还是很有意思的,在此...

  • ajax

    1. 面向对象 javascript 具有面向过程,面向对象,函数式编程的特点 javascript 重要 原型/...

  • Javascript面向对象编程

    阮一峰文档备忘 Javascript 面向对象编程(一):介绍封装 Javascript 面向对象编程(二):介绍...

  • 构造函数与 new 命令

    JavaScript 语言具有很强的面向对象编程能力,本章介绍 JavaScript 如何进行面向对象编程。 对象...

  • 重新认识JavaScript面向对象: 从ES5到ES6

    一. 重新认识面向对象 1. JavaScript是一门面向对象的语言 在说明JavaScript是一个面向对象的...

  • js高级

    学习目标: 理解面向对象开发思想 掌握 JavaScript 面向对象开发相关模式 掌握在 JavaScript ...

  • JavaScript 高级(备忘)

    在线地址:JavaScript 高级 目标 理解面向对象开发思想 掌握 JavaScript 面向对象开发相关模式...

  • 06-JavaScript高级

    学习目标: 理解面向对象开发思想 掌握 JavaScript 面向对象开发相关模式 掌握在 JavaScript ...

网友评论

      本文标题:JavaScript 面向对象(一)

      本文链接:https://www.haomeiwen.com/subject/ctlvottx.html