null:无值,使用typeof不会返回null
undefined:null没有定义类型
object:如果变量是为了保存对象,修改默认值的初始化值为null
对象是什么:对象是包含相关属性和方法的集合体
在JS中所有事务都是对象,如:字符串、数字、数组、日期等。对象是拥有属性和方法的数据。属性是与对象相关的值,方法是能够在对象上执行的动作。
创建对象:对象分为:自定义对象;内置对象
自定义对象:var 对象名 = new Object();
内置对象:
String(字符串)对象;
Date(日期)对象;
Array(数组)对象;
Boolean(逻辑)对象;
Math(算数)对象;
RegExp对象
RegExp对象是正则表达式的缩写,当需要检索某个文本时可以使用一种模式来描述要检索的内容,可以用于解析、格式检查、替换等
构造函数:可以用来创建特定类型的对象,Object和Array原生构造函数运行时可以自动出现的环境中
<script type="text/javascript">
function Flower(name,genera,area,uses){
this.name = name;
this.genera = genera;
this.area = area;
this.uses = uses;
this.showName=function(){
alert(this.name);
}
}
var flowerl = new Flower("长春","长春花属","非洲","观赏或用药")
flowerl.showName();
</script>
使用new操作符创建经历以下四个步骤:
(1) 创建新对象
(2) 将构造函数的作用域给新对象(this就指向了这个新对象)
(3) 执行构造函数中的代码
(4) 返回新对象
创建自定义的构造函数意味着将来可以将它的实例标识为一种特定的类型,而这是构造函数的优点。
构造函数的主要问题就是每个方法都要在每个实例上重新创建一遍。
全局作用域中定义的函数实际上只能被某个对象调用,如果对象需要定义很多方法,就要定义多个全局函数,只有原型对象可以解决。
原型对象:每个函数都有一个prototype属性,这个属性是一个指针,指向一个对象。
用途是包含可以由特定类型的所属实例共享的属性和方法,可以将信息直接添加到原型对象中。
Flower.prototype.showName=function(){
alert(this.name);
}
构造函数变成了空函数,这样也仍然可以通过调用构造函数来创建新对象,而且新对象还会有相同的属性和方法,但与构造函数不同的是,新对象的这些属性和方法是由所有实例共享。
也就是说几个对象都是访问同一组属性和同一个函数。
在默认情况下,所有的原型对象都会自动获得一个constructor(构造函数)属性,这个属性包含一个指向prototype属性所在函数的指针。通过这个构造函数还可以继续为原型对象添加其他属性和方法。
创建了自定义的构造函数之后,其原型对象默认会取得constrctor属性,其他方法则是从Object继承而来。当调用构造函数创建一个新实例后,该实例的内部将包含一个指针指向结构函数的原型对象。
继承:实现继承继承实际方法。
接口继承继承方法签名。
ECMAScript中只支持实现继承,而且其继承主要是依靠原型链来实现的。
原型链:
每个构造函数都拥有一个原型对象,原型对象都包含一个指向构造函数的指针(constructor),实例都包含一个指向型对象的内部指针(_proto_)。
原型链是实现继承的主要方法。
当为一个对象添加一个属性时,这个属性就会屏蔽
关键字prototype
借用构造函数
子类型构造函数的内部调用父类型构造函数
apply([thisOjb[,argArray]])