1.对象
JavaScript中的数据类型
- number(数值类型)
- string(字符串类型)
- boolean(布尔类型)
- null(空类型)
- undefined(未定义类型)
- object:一种复杂的数据类型,该类型实例化的对象是一组数据和功能的集合。
什么是对象
在JavaScript中所有的事物都是对象,对象是拥有属性和方法的数据。属性是与对象相关的值,方法是能够在对象上执行的动作。
什么是面向对象
面向对象仅仅是一个概念和编程思想,它不依赖与某个语言存在,JavaScript语言是通过一种叫原型的方式来实现面向对象编程的。
创建对象
在Java中对象分为两种。
- 自定义对象
- 内置对象
-
自定义对象
使用操作符new 创建一个object的实例,通过”.“为其添加属性和方法var student = new Object(); //创建一个学生对象 student.name = "张三"; //为学生添加name属性并赋值
上述方法是基于Object对象的方式创建对象,在JavaScript中还有一种使用字面量赋值方式创建对象
//创建学生对象添加属性并赋值 var student = { name:"张三" }
-
内置对象
String(字符串)对象、Date(日期)对象、Array(数组)对象、Boolean(逻辑)对象、Math(算数)对象、RegExp()。
RegExp对象是正则表达式的缩写,当需要检索某个文本时可以使用的一种模式包括了更多的字符,可用于格式检查、替换等。
2.构造函数和原型对象
构造函数
构造函数可以用来创建特定类型的对象。所谓的"构造函数"就是一个普通函数,但内部使用了this变量,对构造函数使用new操作符,就能生成实例并且this变量会绑定在实例对象上。
创建和调用构造函数的方法如下。
function Student(name){ //创建构造函数并接收一个参数
this.name = name //为实例对象赋值
}
var stu = new Student("张三") //调用构造函数并传入一个参数
stu.name //调用实例的属性
构造函数的优缺点:
创建自定义的构造函数意味着将来可以将它的实例标识为一种特定的类型,但使用构造函数时每个方法都要在每个实例上重新创建一边。
原型对象
在JavaScript中创建的每个函数都有prototype,prototype就是通过调用构造函数创建的对象实例原型对象,使用原型对象的好处就是可以让所有对象实例共享它所有的属性和方法。
function Student(){
}
Student.prototype.name = "张三"; //为Student的原型添加属性并赋值
var stu = new Student();
stu.name //调用Student原型的name属性
在默认的情况下,所有的原型对象都会自动获得一个constructor(构造函数)属性,这个属性包含一个指向prototyp属性所在的函数的指针。
3.继承
原型链
当访问一个对象的某个属性时,会先在这个对象本身属性上查找,如果没有找到,则会去它的__proto__隐式原型上查找,即它的构造函数的prototype,如果还没有找到就会再在构造函数的prototype的__proto__中查找,这样一层一层向上查找就会形成一个链式结构,我们称为原型链。
对象继承
-
借用构造函数继承
使用父类的构造函数来增强子类实例, 等于是复制父类实例的属性给子类// 定义一个类 function Student(name) { // 使用call或apply调用父类的构造函数传递this或this和参数 People.call(this); this.name = name; } // 猫的实例化对象 new Student('张三');
-
组合继承
结合构造继承和原型链继承,继承父类实例的属性和方法,也继承原型的属性和方法。function Student(name) { // 构造继承 People.call(this); } // 原型链继承 Student.prototype = new People(); //创建对象 new Student();