instanceof判断值类型
类型的判断
typeof
是用于判断所有的值类型,(返回数据类型: undefined
string
boolean
number
symbol(ES6)
Object
Function
)能识别引用类型,但是不能区分object
与Array
的类型
var list = [];
console.log(typeof list); // object
那如何判断数组的类型,使用instanceof
:instanceof
的本质是检测原型链
,运算符的用处是判断值的类型。instanceof
运算符返回一个布尔值boolean
,表示某个对象是否为指定的构造函数的实例。
var d = new Date();
d instanceof Date // true
d instanceof Object // true
注:对于undefined
和null
,instanceOf
运算符总是返回false
。
undefined instanceof Object // false
null instanceof Object // false
构造函数
构造函数与普通函数的创建方式一样,习惯上首字母大写;用于新建实例对象
function Person(name){
this.name=name;
this.sayHi = function() {
alert("Hi")
}
}
var student1= new Person('wendy');
var student2= new Person('kim');
student1.name; // 'wendy'
student1.sayHi(); //
**缺点:**同一个构造函数的多个实例之间,无法共享属性,从而造成对系统资源的浪费。
prototype 原型的属性作用
JavaScript
的每个对象都继承另一个对象,后者称为“原型”(prototype
)对象。一方面,任何一个对象,都可以充当其他对象的原型;另一方面,由于原型对象也是对象,所以它也有自己的原型。null也可以充当原型,区别在于它没有自己的原型对象。
每一个构造函数都有一个prototype
属性,这个属性会在生成实例的时候,成为实例对象的原型对象。
JavaScript
继承机制的设计就是,原型的所有属性和方法,都能被子对象共享;原型链的继承机制;
constructor的属性
prototype
对象有一个constructor
属性,默认指向prototype
对象所在的构造函数
由于constructor
属性定义在prototype
对象上面,意味着可以被所有实例对象继承。
function P() {}
P.prototype.constructor === P // true
var p = new P();
// function P() {}
p.constructor === P.prototype.constructor
// true
p.hasOwnProperty('constructor')
// false