JavaScript红宝书笔记:创建对象

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");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值