1.创建对象
在JS当中,对象分为两种: 自定义对象 内置对象
1.1 自定义对象
与Java中创建对象一样,创建自定义对象的最简答的方式就是使用操作符new 创建一个object的实例,然后通过"."为其添加属性和方法
语法: var 对象名称 =new Object();
或者使用字面量赋值的方式在定义对象的时候为其添加属性和方法
var 对象名称={
属性1:值1,
属性2,值2,
函数名:function(){
//函数体
}
}
1.2 内置对象
JS的内置对象是一种特殊的数据,常见的内置对象如下:
- String(字符串)对象
- Date(日期)对象
- Array(数组)对象
- Boolean(逻辑)对象
- Math(算数)对象
- RegExp对象 正则表达式
2. 构造函数
所谓的构造函数就是一个普通的函数,但是内部使用了this变量,对构造函数使用new操作符,就能生成实例
function Flower(name,genera){
this.name=name;
this.genera=genera;
this.showName=function(){
}
}
var flower=new Flower("曼陀罗花","茄科");
使用构造函数创建新实例,必须使用new操作符,以这种方式调用构造函数实际上会经历以下四个步骤
- 创建一个新对象
- 将构造函数的作用域赋给新对象(this就指向了这个新对象)
- 执行构造函数中的代码
- 返回新对象
3.原型对象
3.1 prototype
函数定义的时候,函数本身会默认为该函数创建一个prototype的属性,而如果用new 运算符来生成一个对象的时候就没有prototype属性。而prototype也是一个对象,默认情况下prototype包含了2个属性,一个是constructor,另外一个是[[prototype]](大多数浏览器下显示为__proto__)。constructor属性是一个指向prototype属性所在函数的指针。
3.2 constructor
constructor始终指向创建当前对象的构造函数。我们知道每个函数都有一个默认的属性prototype,而这个prototype的constructor默认指向这个函数
3.3. 确定原型和实例的关系
使用instanceof 操作符,只要用这个操作符来测试实例与原型链中出现过的构造函数,结果就会返回True
4.1原型
每个函数都有prototype(原型)属性,这个属性是一个指针,指向一个对象,这个对象的用途是包含特定类型的所有实例共享的属性和方法,即这个原型对象是用来给实例共享属性和方法的。
而每个实例内部都有一个指向原型对象的指针。
4.2原型链
每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含指向原型对象内部的指针。我们让原型对象的实例(1)等于另一个原型对象(2),
此时原型对象(2)将包含一个指向原型对象(1)的指针,
再让原型对象(2)的实例等于原型对象(3),如此层层递进就构成了实例和原型的链条,这就是原型链的概念