前言:
如今小伙伴们对“js的函数格式”大约比较讲究,咱们都需要剖析一些“js的函数格式”的相关文章。那么小编在网络上收集了一些有关“js的函数格式””的相关资讯,希望看官们能喜欢,咱们快快来了解一下吧!由于我最近在学nodejs所以拖延了一段时间,你们有好的nodejs资料可以分享给我,接下来介绍js高级函数,以下内容您需要对函数闭包,作用域,面向对象等熟悉。
安全的类型检测
javascript内置的类型检测机制并不是完全可靠,比如typeof,由于它有些无法预知的行为,经常会导致检测数据类型时得不到靠谱的结果,相信你们已经遇到过了
比如instanceof操作符在存在多个全局作用域时也是问题多多比如(frame);
解决上述问题就是在任何值上调用Object原生的toStriing()方法,会返回一个[object NativeConstructorName]格式的字符串。每个类在内部都有一个[[class]]属性,这个属性就指定了上述字符串的构造函数名
Object.prototype.toString.call(value)//[object Array]
由于原生数组的构造函数与全局作用域无关,因此使用toString()就能保证返回值一至
注意该方法不能检测非原生构造函数的构造函数名。
作用域安全的构造函数
回忆一下构造函数:构造函数其实就是一个用new操作符调用的函数。构造函数内用到的this对象会指向新创建的对象实例
function person(name,age,sex){
this.name=name;
this.age=age;
this.sex=sex;
}
var person=person("小明",20,"男")
当我们没有使用new时会出现什么情况?
console.log(window.name)//小明
console.log(window.age)//20
console.log(window.sex)//男
这个问题是由this对象晚绑定造成的,这里this被解析成了window对象。由于windw的name属性是用于识别链接目标和frame的,这里对该属性的偶然覆盖可能会导致其他错误,解决该问题就是创建作用域安全的构造函数
如果构造窃取函数结合原型链或寄生组合函数可以解决这个问题
function person(sides){
if(this instanceof person){
this.sides=sides;
this.getArea=function(){
return 0
}
}else{
return new person(sides)
}
}
function person1(width,height){
person.call(this,2);
this.width=width;
this.height=height;
this.getArea=function(){
return this.width*this.height;
}
}
person1.prototype=new person();
var s= new person1(5,10)
console.log(s.sides)
一个person1实例也同时事一个person实例,所以person.call()会照愿意执行
标签: #js的函数格式 #js函数使用方法视频 #js函数使用方法视频讲解 #js函数使用方法视频教学