一、instanceof检测对应的数据类型(是否为对应类所产生的实例化对象),如果是简单数据类型(数值,字符,布尔值),必须使用new类来创建才能检测成功,下面举例说明:
var obj = {
name : "张三"
}
var r = obj instanceof Object //输出true
var num = 1 //简单模式创建num
var r = num instanceof Number //输出false
var num = new Number(1) //new实例化创建一个num
var r = num instanceof Number //输出true
二、isPrototypeOf()是否是通过指定的构造函数创建处理的函数(原型上的方法)
function Student(name){
this.name = name
}
var s1 = new Student("张三")
var result1 = Student.isPrototypeOf(s1) //输出false
var result2 = Student.prototype.isPrototypeOf(s1) //输出true
三、hasOwnProperty() 检测当前属性是否属于构造函数
function Student(){
this.name = "张三"
this.age = 21
}
Student.prototype.score = 100
var s = new Student()
var r1 = s.hasOwnProperty("name") //输出true
var r2 = s.hasOwnProperty("score") //score是在Student构造函数的原型上,输出false
四、in 判断当前对象是否具有对应属性 key in 对象 不管key是在构造函数里的还是原型上的,只要存在,都返回true
function Student(){
this.name = "张三"
this.age = 21
}
Student.prototype.score = 100
var s = new Student()
var r1 = "name" in s //输出true
var r2 = "score" in s //输出true
五、总结:写一个函数,传入一个属性以及一个对象,判断对应属性上是否存在于该对象的原型上
1.需要先确定当前对象有这个属性
2.其次判断这个属性是否在构造函数上,若不在构造函数则必定在原型上
function hasownprototype(name,obj){
if (name in obj){
if(obj.hasOwnProperty(name)){
return false
}else{
return true
}
}else{
return false
}
}
function Student(){
this.name = "张三"
this.age = 21
}
Student.prototype.score = 100
var s = new Student()
var r1 = hasownprototype("score",s) //输出true
var r2 = hasownprototype("name",s) //输出false