构造函数 作用域安全

非new调用Person时,防止this绑定到全局变量window上,引起数据覆盖和污染。

function Person(name, age, addrsss) {
   if (this instanceof Person) {
       this.name = name;
       this.age = age;
       this.address = address;
   } else {
       return new Person(name, age, address);
   }
}

注意:安全作用域函数在使用窃取模式实现继承时,会导致错误(但是继承你不用原型指向???),请看下面代码:

function Person(name) {
   if (this instanceof Person) {
       this.name = name;
   } else {
       return new Person(name);
   }
}

function Spring(name, age) {
   Person.call(this, name);
   this.age = age;
}

Spring对象并未获取name属性,因为Person是作用域安全的构造函数,修正这个问题可以在最后加上一句原型指向:

Spring.prototype = new Person();
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,991评论 19 139
  • 普通创建对象和字面量创建对象不足之处:虽然 Object 构造函数或对象字面量都可以用来创建单个对象,但这些方式有...
    believedream阅读 2,435评论 2 18
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,970评论 6 342
  • 继承 一、混入式继承 二、原型继承 利用原型中的成员可以被和其相关的对象共享这一特性,可以实现继承,这种实现继承的...
    magic_pill阅读 1,081评论 0 3
  • 本章内容 理解对象属性 理解并创建对象 理解继承 面向对象语言有一个标志,那就是它们都有类的概念,而通过类可以创建...
    闷油瓶小张阅读 883评论 0 1