您的位置:首页 > Web前端 > JavaScript

JavaScript红宝书笔记:创建对象

2016-08-24 16:40 405 查看
JavaScript包含三部分:ECMAScript、DOM、BOM

ECMAScript提供了核心语言功能,面向对象,但是没有类的概念。本篇文章要总结一下创建对象的几种方式。如果面试官问你如果创建对象,你可以把它们都说一遍= = 。为了不那么累,还是说最好的方法吧。

1.创建Object的实例(最简单)

//使用new操作符,也就是Object构造函数的方法。
var person = new Object();
person.name ="panda";
person.sayName = function(){
alert(this.name);
};


//对象字面量的方法1
var person = {
name:"panda",
sayName:function(){
alert(this.name);
}
}


//对象字面量的方法2
var person = {};
person.name ="panda";
person.sayName = function(){
alert(this.name);
};


2. 工厂模式(不能识别对象类型)

工厂模式就是把1中的方法封装起来。

function createPerson(name){
var person = new Object();
person.name = "panda";
person.sayName=function(){
alert(this.name);
};
return person;
}
var person1 = createPerson("panda");


3. 构造函数模式

受new Object的启发,也可以new一个自定义的构造函数Person

//缺点:每个方法都要在每个实例上重新创建一遍
function  Person(name){
this.name = name;
this.sayName = function(){
alert(this.name);
};
}
var person1 = new Person("panda1");
var person2 = new Person("panda2");


//缺点:封装性不好
function  Person(name){
this.name = name;
this.sayName = sayName;
}
function sayName(){
alert(this.name);
};
var person1 = new Person("panda");


4. 寄生构造函数模式(不能确定对象类型)

和工厂模式比较相像。

function createPerson(name){
var person = new Object();
person.name = "panda";
person.sayName=function(){
alert(this.name);
};
return person;
}
var person1 = new Person("panda");//注意看这里


5. 稳妥构造函数模式(安全)

和工厂模式比较相像。

function createPerson(name){
var person = new Object();
person.name = "panda";
person.sayName=function(){
alert(this.name);
};
return person;
}
var person1 = Person("panda");//注意看这里


6. 原型模式(不适合引用类型的属性值)

原型模式构造出来的对象,对象拥有的属性和方法由所有实例共享。

function Person(){
}

Person.prototype.name = "panda";
Person.prototype.sayName = function(){
alert(this.name);
};

var person1 = new Person();
person1.sayName();

var person2 = new Person();
person2.sayName();


//重写原型对象,这种写法的construction属性变成了Object
function Person(){
}
Person.prototype= {
name:"panda",
sayName:function(){
alert(this.name);
}
};


7.构造函数和原型混合模式(最常用)

属性在构造函数中定义

方法在原型中定义

function Person(name){
this.name = name;
}
Person.prototype = {
constructor:Person,
sayName:function(){
alert(this.name);
}
}
var person1 = new Person("panda");


8.动态原型模式(可以确定对象类型)

function Person(name){
this.name = name;
//方法
if(typeof   this.sayName!="function"){
Person.prototype.sayName=function(){
alert(this.name);
};
}
}
var person1 = new Person("panda");
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息