美文网首页
构造函数 作用域安全

构造函数 作用域安全

作者: rocneal | 来源:发表于2016-10-12 00:55 被阅读0次

非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();

相关文章

  • 谈谈js中的高级函数

    1.作用域不安全的构造函数 如下: 作用域安全的构造函数会,然后再进行更改,如下: 实现这个安全模式,相当于锁定了...

  • 作用域安全的构造函数

    作用域安全的构造函数 构造函数(非new操作)在构造函数中,使用new操作符的时候,函数的内部this指向创建的新...

  • 构造函数 作用域安全

    非new调用Person时,防止this绑定到全局变量window上,引起数据覆盖和污染。 注意:安全作用域函数在...

  • 作用域安全的构造函数。

    构造函数的作用域还有安全这么一说。很多人估计都不知道,下面通过一个例子来说明,什么是作用域不安全的构造函数。 以上...

  • JS高级函数

    高级函数 在 JavaScript 中使用函数的高级方法。 数据类型的安全检测 构造函数的安全作用域 惰性载入函数...

  • JS高程:读书摘要(十八)高级技巧

    一、高级函数 安全类型检测 作用域安全的构造函数 如果使用上述写法,当你借用构造函数来实现继承的时候,会被破坏。P...

  • 作用域安全的构造函数

    当被new调用时,设置name属性;不能不是new调用,而是普通函数调用,则以new递归调用自己来为对象创建正确的实例

  • 作用域安全的构造函数

  • 第二十二章 高级技巧

    1. 作用域安全的构造函数:在进行任何更改前,首先确认this对象是正确类型的实例(锁定可以使用构造函数的环境,避...

  • C++作用域解析符号 ::

    作用域解析符号,用于标志函数或变量的作用域,如上代码所示,该构造函数属于Myclass域下,明确标出所属。...

网友评论

      本文标题:构造函数 作用域安全

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