JavaScript中的基本数据类型
number(数值类型)
string(字符串类型)
boolean(布尔类型)
null(空类型)
undefined(未定义类型)
object
1.系统内置对象。
String 字符串对象
Date 日期对象
RegExp 正则表达式对象
Array 数组对象
Boolean 布尔对象
Number 数值对象
2.自定义对象
(1) 自定义对象方式一: new Object() 方式创建对象
var 对象引用名 = new Object();
对象引用名.属性名1 =属性值1;
对象引用名.属性名2 =属性值2;
对象引用名.方法名1 =function(){方法体;}
-- 使用对象:
对象引用名.属性
对象引用名.方法
(2)自定义对象方式二:json格式创建对象
var 对象引用名={
属性名1:属性值1,
属性名2:属性值2,
方法名:function(){方法体;}
}
-- 使用对象:
对象引用名.属性
对象引用名.方法
3 . 构造函数
(1)定义构造函数的格式:
function 首字母大写的构造函数名(参数1,参数2){
this.属性名1 = 参数1;
this.属性名2 = 参数2;
this.方法名 = function (){
方法体;
}
}
(2) 使用构造函数:
-1- 创建对象并给属性赋值 :
var 对象引用名 = new 构造函数名(实际参数1,实际参数2);
-2- 调用方法:
对象引用名.方法名();
(3) constructor属性 和 instanceof操作符
-1- constructor 用法
对象引用名.constructor //获取构造函数对象
该属性常用于,获取构造对象, 判断是否和某个构造函数是否相等。
例如:Person构造函数,创建的对象var p = new Person()
alert(p.constructor == Person);
//判断p这个对象引用是否由Person实例化而来
-2- instanceof 用法(判断是否由什么实例化而来)
例如判断对象 var p = new Person();
p 是否由 Person 实例化而来
alert(p instanceof Person) // 结果为true
alert(flower1 instanceof Object); //结果也为true
(因为Object 是js中所有对象的父对象。)
4.原型对象 prototype (原型,雏形,初始状态)
(1)什么是原型对象
-1- 原型对象的存在
任何js中的对象,都有一个原型对象,可以通过调用prototype属性获取
(类似于java中的 class加载到内存中的字节码对象)
-2- 原型对象 和java中的字节码对象 的比较 理解
可以用这个字节码对象中的描述的属性和方法,实例化出来无数个具体对象
而这些具体的对象,都具备字节码对象中描述的属性和方法。
-3- 原型对象 应用场景
js中的这个原型对象,获取到并且添加 额外的属性,和方法,
那么,则所有由这个原型对象,创建的对象,都具备了该属性,及方法。
(2)原型对象的作用 :
扩展对象的属性和方法
这些js中对象,可以直接使用原型对象增加扩展的属性和方法
(3)如何获取一个对象的 原型对象
对象名.prototype
-1- 给原型对象添加 属性及方法。
对象名.prototype.属性名1=属性值1;
对象名.prototype.方法名1=function(){
方法体;
}
5. 原型链 让子父对象产生继承关系。
定义:
一个原型对象是另一个原型对象的实例
相关的原型对象层层递进,就构成了实例与原型的链条,就是原型链
用法:
通过 prototype 让对象之间产生继承关系。
子对象.prototype=new 父对象();
例如:
function Humans(){
this.foot=2;
}
function Man(){
this.head=1;
}
Man.prototype=new Humans();
var man1=new Man();
则,Man对象的引用man1 具备 Humans的所有属性方法,和Man的所有属性及方法
6.借用构造
为了方便对象之间产生继承关系
ECMAScript 三版为 Function 对象加入了两个方法,即 call() 和 apply()。
(1)call()
call() 它的第一个参数用作 this 的对象。其他参数是构造所需参数。
语法: 被继承父对象名.call(this,被继承构造所需参数);
this 代表当前对象,也就是子对象。
在本类构造中,调用父类构造的call方法。
例如:
function Flower(name) {
this.name = name;
}
function QiangWei() {
Flower.call(this,"花")
this.type = "蔷薇科";
}
(2) apply()
apply() 方法有两个参数,用作 this 的对象和要传递给函数的参数的数组
语法:被继承父对象名.apply(this, 父对象构造所需参数数组);
注意:
只有父类中的参数顺序与子类中的参数顺序完全一致时
才可以传递参数对象。
如果不是,就必须创建一个单独的数组,
按照正确的顺序放置参数。
或者可以使用 call() 方法。
(3)示例:
function Humans(name){
this.name=name;
}
function Man(){
Humans.call(this,"mary"); //继承了Humans,同时还传递了参数
this.age=38; //实例属性
}
var man1=new Man();
alert(man1.name); //输出mary
alert(man1.age); //输出38
7. 组合继承
组合继承:有时也叫做伪经典继承
将原型链和借用构造函数的技术组合到一块,
发挥二者之长的一种继承模式
使用原型链实现对原型属性和方法的继承,
而通过借用构造函数来实现对实例属性的继承
示例:
<script>
function Humans(name){
this.name=name;
this.clothing=["trousers","dress","jacket"];
}
Humans.prototype.sayName=function(){
alert(this.name);
};
function Man(name,age){
Humans.call(this,name); //继承属性
this.age=age;
}
Man.prototype=new Humans(); //继承方法
Man.prototype.sayAge=function(){
alert(this.age);
};
var man1=new Man("mary",38);
man1.clothing.push("coat");
alert(man1.clothing); //输出"trousers,dress,jacket,coat"
man1.sayName(); //输出mary
man1.sayAge(); //输出38
var man2=new Man("tom",26);
alert(man2.clothing); //输出"trousers,dress,jacket"
man2.sayName(); //输出tom
man2.sayAge(); //输出26
</script>