什么是面向对象
把数据和行为(对数据的操作)结合起来,有类的概念,通过类创建任意多个具有相同属性和方法的对象
- 继承:可以使子类复用父类公开的变量、方法;
- 封装:屏蔽一系列的细节。使外部调用时只要知道这个方法的存在;
- 多态:父类的方法继承的到子类以后可以有不同的实现方式;
var Person = {
name: "wheeler",
age: 25,
inMeeting: function () {
return "I am in Meeting";
}
};
创建对象
为了避免重复造轮子,产生大量的代码,我们可以使用工厂模式和构造函数模式。
创建对象目前有两种方式:
- 对象字面量
var Person = {
name: "wheeler",
age: 25,
inMeeting: function () {
return "I am in Meeting";
}
};
优点:灵活方便
缺点:每创建一个新的对象都需要写出完整的定义语句,不便于创建大量相同类型的对象,不利于使用继承等高级特性
- 使用new表达式
主要是配合构造函数使用
function Person(name, age, dream){
this.name = name;
this.age = age;
this.dream = dream;
this.myDream =function () {
alert(this.dream);
}
};
person1 = new Person('wheeler', 25, "哈哈");
person2 = new Person('wheeler2', 26, "嘿嘿");
工厂模式
什么是工厂模式?就是像工厂一样批量创建对象。具体来说,抽象创建具体对象的过程。
var createPerson = function (name, age, dream) {
var person = {
name: name,
age: age,
dream: function () {
return dream;
}
};
return person;
};
var person1 = createPerson('wheeler', 25, "哈哈");
var person2 = createPerson('wheeler2', 26, "嘿嘿");
构造函数模式
ECMAScript 中的构造函数可用来创建特定类型的对象。像Object和Array这样的原生构造函数,在运行时会自动出现在执行环境中。
function Person(name, age, dream){
this.name = name;
this.age = age;
this.dream = dream;
this.myDream =function () {
alert(this.dream);
}
};
var person1 = new Person('wheeler', 25, "哈哈");
var person2 = new Person('wheeler2', 26, "嘿嘿");
以上代码:
- 没有显式地创建对象;
- 直接将属性和方法赋给了this对象;
- 没有return语句。
以这种方式调用构造函数实际上会经历以下4个步骤:
- 创建一个新对象;
- 将构造函数的作用域赋给新对象(因此this就指向了这个新对象);
- 执行构造函数中的代码(为这个新对象添加属性);
- 返回新对象。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。