zoukankan      html  css  js  c++  java
  • 浅谈JavaScript的New关键字

      原型闭包算是JavaScript中最常见,最难以理解,最容易被当做问题的两个部分,当然还有它们的延伸,如作用域链,继承等等吧,我最近也是各种看,各种翻,记录点自己的心得,写写总会让自己的理解更深一些。(跟标题的关系不大啦,就感慨句,每次总感觉自己懂了,再翻还是收获满满)

      先谈一下JavaScript中New关键字吧,通常我们通过它来创建一个类的实例对象,在JavaScript中,实例化对象之后,也就继承了类的属性以及方法。通过代码来演示一下

    function Person(name){
      this.name = name;
    }
    Person.age= "23";
    Person.prototype.say = function(){
      console.log("I'm " + this.name);
    };
    var person= new Person("王方");
     
    console.log(
      person.name, //王方
      person.height //undefined
    );
    person.say(); //I'm 王方
     
    console.log(
      Person.name, //Person
      Person.age//23
    );
    Person.say(); //Person.say is not a function

    我们看下这一行

    var person= new Person("王方");

    new 到底做了什么呢?恩 JS引擎做的工作就是下面这样 

    var obj = {};
    obj.__proto__ = Person.prototype;
    var result = Person.call(obj,"王方");
    return typeof result === 'obj'? result : obj;

    1.首先创建一个新对象

    2.把obj的__proto__ 指向Person的原型对象prototype,此时便建立了obj对象的原型链:obj->Person.prototype->Object.prototype->null

    3.在obj对象的执行空间调用Person函数并传递参数“王方”。 相当于var result = obj.Person("王方")。当这句执行完之后,obj便产生了属性name并赋值为"王方"。

    4.判断返回值,如果无返回值或者返回一个非对象值,就将obj返回,否则讲返回值作为新对象返回(有点绕口,三元运算符,自己看下吧)

    总结:

    Javascript的new关键字主要的作用是继承,如上例子所言,但是要记住一点,Person是一个函数,而person是一个对象,至于函数与对象之间的区别,我有时间再写吧。

  • 相关阅读:
    Head First设计模式读书笔记
    通过FileReference打开本地图片崩溃的解决方法
    Asea——轻量级的AS3模块配置与加载管理库
    AGAL反编译器
    [Stage3D]硬件加速的径向模糊
    C#的timer类问题~!
    c语言中的大数运算模块
    TRACERT命令及用法
    Linux用户和用户组的管理概述
    linux下挂载windows的共享文件目录ftp文件夹到/root/wind目录
  • 原文地址:https://www.cnblogs.com/fangshidaima/p/5808050.html
Copyright © 2011-2022 走看看