在JavaScript中,对象是拥有属性和方法的数据,属性是与对象相关的值,方法是能够在对象上执行的动作。JavaScript是通过一种叫做原型的方式来实现面向对象编程的。(面向对象仅仅是一个概念或者编程思想,它不依赖于某个语言存在。)
一、创建对象
1、内置对象:常见的有String、Date、Array、Boolean、Math、RegExp
2、自定义对象
01、基于Object对象的方式创建对象
var 对象名称=new Object(); (创建了一个对象)
对象名称.属性名="属性值"; (给对象添加属性)
对象名称.方法名=function(){ JavaScript语句} (给对象添加方法)
02、字面量赋值法
var 对象名={ 属性名1:属性值1, 属性名2:属性值2, 方法名:function(){ JavaScript语句} } (注意属性名和属性值之间用冒号,多个属性之间用逗号--Json格式)
补充:
2.用function(函数)来模拟class (无参构造函数)
3.使用工厂方式来创建(Object关键字)
4.使用原型对象的方式 prototype关键字
5.混合模式(原型和构造函数)
6.动态原型的方式(可以看作是混合模式的一种特例)
二、构造函数
所谓的“构造函数”就是一个普通函数,但是内部使用了this变量,对构造函数使用new操作符,就能生成实例,并且this变量会绑定到在实例对象上
function Flower(name,genera,area,use){ this.name=name; this.genera= genera; this.area=area; this.use=uses; this.showName=showName; } function showName(){ alert(this.name); }
三、原型对象
在JavaScript中每个对象都有一个prototype属性,这个属性是一个指针,指向原型对象。prototype就是通过调用构造函数而创建的那个对象实例的原型对象。
在默认情况下,所有原型对象都会自动获得一个constructor(构造函数)属性,这个属性包含一个指向prototype属性所在函数的指针。
四、原型链
在JavaScript中,每个构造函数都拥有一个原型对象(prototype),原型对象都包含一个指向构造函数的指针(constructor),实例都包含一个指向原型对象的内部指针(_proto_)
function Human(){ } function Woman(){ } Woman.prototype=new Human();
Woman.prototype等于另一个类型Human的实例,那么此时,原型对象Woman.prototype将包含一个指向原型Human.prototype的指针,如此层层递进,构成了实例与原型的链条,这就是所谓的原型链。
五、借用构造函数
借用构造函数:就是在子类型构造函数的内部调用父类型构造函数,即在子类型构造函数内部通过apply()或call()方法调用父类型的构造函数
apply(thisObj,argArry) call(thisObj,arg1,arg2,arg3.......)区别在于apply只接受两个参数,call却需要把传递给函数的参数全部列举出来
六、组合继承
有时也叫伪经典继承,其思路是使用原型链实现对原型属性和方法的继承,而通过借用构造函数来实现对实例属性的继承。
function Animal(name,age){ this.name=name; this.age=age } function Dog(name,sex,color){ Animal.call(this,name);//通过借用构造函数,Dog还可以添加自己的属性sex、color this.sex=sex; this.color=color; } Dog.prototype=new Animal();//通过原型链实现对原型属性和方法的继承