本章简介:
JavaScript是一种基于对象的语言,在JavaScript中遇到的所有东西几乎都是对象。
但是它并不是一种真正的面向对象的编程语言,而是通过 构造函数、原型链实现的一种基于对象的面向对象的语言。
今天让我们来认识什么是对象,如何创建对象,构造函数、原型链
以及继承在开发中的应用。
本章单词:
Object 基类
Constructor 构造函数
Instance 实例
Call 呼叫
Apply 申请
Combination 结合,组合
Inheritance 继承
4、1 对象
在JavaScript中,所有的事物都是对象,比如字符串、数值、数组、函数等等’
1、 JavaScript的数据类型
JavaScript提供了基本的数据类型
Number 数值
String 字符串
Boolean 布尔
Null 空
Undefined 未定义的
Object 对象
2、 对象是什么
JavaScript的对象和 java 中的对象一样,对象是包含相关属性和方法的集合体。
在JavaScript中,所有的事物都是对象,字符串、数值、数组、函数等等’
对象是拥有属性和方法的数据,属性是与对象相关的值,方法是能够所执行的操作
3、 创建对象
在JavaScript中有内置对象和自定义对象两种
和java中一样,创建自定义对象最简单的方式就是使用 new 操作符。
var man = new Object();
这是基于 Object 对象的方式创建对象,还有一种使用 字面量赋值的方式在定义对象的时候为其添加属性和方法。
var son={ name:jack, age:99 }
4、2 构造函数和原型对象
无论是基于Object创建对象,还是使用字面量赋值的方式创建对象,都有明显的缺点
那就是使用同一个接口需要创建很多的对象。
1、 构造函数
构造函数可用来创建特定类型的对象。
构造函数函数名第一个字母应该大写。
使用构造函数创建新实例,必须使用 new 操作符
function Girl(name,age,color) { this.name = name; this.age = age; this.color = color; } var girlOne = new Girl("lady",18,"black");
2、 原型对象
在JavaScript中创建的每个函数都有一个 prototype属性,这个属性是一个指针,指向一个对象,而这个对象的用途是可以包含由特定类型的所有实例共享的属性和方法。
使用原型对象的好处就是可以让所有对象实例共享它的所有属性和方法。
function Color() { } Color.prototype.color = "red"; var colorOne = new Color(); var colorTwo = new Color();
4、3 继承
许多的面向对象语言都支持两种继承方式,接口继承和实现继承
接口继承只继承方法签名,而实现继承则继承实际的方法。
ECMAScript中只支持实现继承,而且其继承主要是依赖原型链来实现的。
1、 原型链
在JavaScript中每个构造函数都拥有一个原型对象,原型对象都包含一个指向构造函数的指针(constructor),实例都包含一个指向原型对象的内部指针(_proto_)。
function Humans() { this.foot = 2; } Humans.prototype.getFoot=function () { return this.foot; } function Man() { this.head = 1; } Man.prototype = new Humans(); // Man 继承 Huamns Man.prototype.getHead=function () { return this.head; } var manOne = new Man(); manOne.getFoot(); manOne.getHead();
2、 对象继承
1、 借用构造函数
原型链虽然强大,但是也有一些问题
所谓借用构造函数就是在子类型构造函数的内部调用父类的构造函数,
在子类型构造函数的内部通过apply() 或 call() 方法调用父类型的构造函数。
function Humans() { this.name = "ok"; } function Man() { Humans.call(this) //继承 Humans }
2、组合继承
组合继承(combinationinheritance),指的是将原型链和借用构造函数的技术组合在一块,从而发挥二者之长的一种继承模式。
思路就是使用原型链实现对原型属性和方法的继承,而通过借用构造函数来实现对实例属性的继承。
这样既通过在原型上定义方法实现了函数的复用,又能保证每个实例都有它自己的属性。
function Humans(name) { this.name = name; } Humans.prototype.sayName=function () { return this.name; } function Man(name,age) { Humans.call(this,name); //继承属性 this.age = age; } Man.prototype = new Humans(); //继承方法 Man.prototype.sayAge=function () { return this.age; }
组合继承避免了原型链和借用构造函数的缺陷,融合了它们的优点,是JavaScript中最常用的继承模式。
本章简介:
1、JavaScript中的对象分为自定义对象和内置对象
2、学会给自定义对象添加属性和方法
3、构造函数可以用来创建特定类型的对象
4、原型链是实现继承的主要方法,学会画原型链
5、借用构造函数就是子类型构造函数的内部通过 apply()和 call()调用父类型的构造函数
6、组合继承的思路就是使用原型链实现对原型属性和方法的封装。