zoukankan      html  css  js  c++  java
  • 作用域安全的构造函数

    一般构造函数定义和调用如下:

    function Person(name,age,job)
    {
       this.name=name;
       this.age=age;
       this.job=job; 
    }
    var person=new Person('thinksley',24,'web developer');
    console.log(person.name); //thinksley

    而如果实例化对象的时候不用new的话,this会映射到全局的window对象上,这时候person.name就会变成undefined了,要把对象改成window:

    function Person(name,age,job)
    {
       this.name=name;
       this.age=age;
       this.job=job; 
    }
    var person=Person('thinksley',24,'web developer');
    console.log(window.name);//thinksley

    console.log(person.name);//undefined

    那么完整的构造函数可以用if判断来做了,如下

    function Person(name,age,job)
    {
      if(this instanceof Person)
      {
       this.name=name;
       this.age=age;
       this.job=job; 
      }
      else
      {
       return new Person(name,age,job); 
      }
    }
    var person=Person('thinksley',24,'web developer');
    console.log(person.name);//thinksley

    var person=new Person('thinksley',24,'web developer');
    console.log(person.name); //thinskley

     这样构造函数就确保了this是否是Person对象的实例,要么使用new操作符,要么在现有的person实例环境中调用构造函数。

    Top
    收藏
    关注
    评论
  • 相关阅读:
    oracle对象之序列
    PLSql工具介绍
    oracle对象之同义词
    oracle对象之视图
    缓存问题汇总
    消息队列问题汇总
    算法-排序算法-1
    redis-主从数据一致
    数据结构与算法-完全二叉树/满二叉树
    写缓冲器与无效化队列
  • 原文地址:https://www.cnblogs.com/thinksley/p/2924098.html
Copyright © 2011-2022 走看看