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

作用域安全的构造函数

作者: 萘小蒽 | 来源:发表于2019-04-16 09:58 被阅读0次

作用域安全的构造函数

  1. 构造函数(非new操作)
    在构造函数中,使用new操作符的时候,函数的内部this指向创建的新对象实例。
function Person(age, name){
  this.age = age;
  this.name = name;
}
var person = new Person(33, "刘海柱");

上面的例子,如果没有用new,this就指向了window了

var person = Person(33, "刘海柱");
console.log( window.age,window.name) //33 "刘海柱"

解决方法:

function Person(age, name){
  if(this instanceof Person){
    this.age = age;
    this.name = name;
  }else{
     return new Person(age, name);
  }
}
  1. 构造函数窃取模式(使用call继承)
    当使用构造函数窃取模式的时候上面的方法就没用了
function Person(age, name){
  if(this instanceof Person){
    this.age = age;
    this.name = name;
  }else{
     return new Person(age, name);
  }
}
function Person2(job){
   Person.call(this, 33, "刘海柱") //关键问题
   this.job = job;
}
var person = new Person2("法师")
  • 上面构造函数Person的作用域是安全的,而Person2构造函数却不是。
  • Person2的实例通过 Person.call()来继承Person的属性,而这里的this并不是Person的实例。导致继承失败。

解决方法:

function Person(age, name){
  if(this instanceof Person){
    this.age = age;
    this.name = name;
  }else{
     return new Person(age, name);
  }
}
function Person2(job){
   this.job = job;
}
var person = new Person2("法师")
 person.prototype = new Person(33, "刘海柱")//原型

相关文章

  • 谈谈js中的高级函数

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

  • 作用域安全的构造函数

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

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

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

  • JS高级函数

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

  • 构造函数 作用域安全

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

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

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

  • 作用域安全的构造函数

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

  • 作用域安全的构造函数

  • 第二十二章 高级技巧

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

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

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

网友评论

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

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