1、实例
- 何为实例,可以理解为实际存在的例子;
- 如果想知道一个对象是否是另一个对象的实例,最简单有效的方法就是使用instanceof操作符,该操作符能确定左侧的对象是否是右侧类的实例,返回一个boolean值;
- 如使用该操作符检测基本类型的值,则始终会返回 false,因为基本类型不是对象。
1、js中所有对象都是Object的实例(因为Object是一个基本对象类型,其他所有对象都从 Object 继承了基本的行为);
/*控制台输入*/
Function instanceof Object; //true
Array instanceof Object; //true
String instanceof Object; //true
Math instanceof Object; //true
window instanceof Object; //true
Element instanceof Object; //true
screen instanceof Object; //true
...
2、js中所有函数(包含内置构造函数)都是Function的实例;
例如:Object、Array、Date、Function、RegExp、Error、EvalError 、RangeError 、ReferenceError 、SyntaxError 、TypeError、URIError 、Boolean、Number、String都是内置构造函数;
/*控制台输入*/
var fun=function (){}
fun instanceof Function; //true
Object instanceof Function; //true
Array instanceof Function; //true
Error instanceof Function; //true
Number instanceof Function; //true
RegExp instanceof Function; //true
...
3、js中所有手动创建的对象都是对应类型的实例,同样也是Object的实例;
/*控制台输入*/
var obj={};
obj instanceof Object; //true
var arr=[];
arr instanceof Array; //true
arr instanceof Object; //true
var str=new String("abcdef");
str instanceof String; //true
str instanceof Object; //true
var str2="abcdef"; //str2是基础数据类型,不是对象
str2 instanceof Array; //false
str2 instanceof Object; //false
var num=new Number(100);
num instanceof Number; //true
num instanceof Object; //true
...
2、prototype(原型对象)
- 所有构造函数都拥有一个prototype属性,里面存储了用于共享的属性和方法;
- 每一个javascript对象(除null外)都和一个prototype属性关联;
3、constructor(构造器)
- 每个原型对象都有一个constructor属性,用于指向原型对象的构造函数;
4、_proto _(原型指针)
- 每个实例对象上都有一个_proto_属性,用于指向产生当前实例的prototype原型对象;