js对象的创建模式

方式一: Object构造函数模式

  * 套路: 先创建空Object对象, 再动态添加属性/方法  * 适用场景: 起始时不确定对象内部数据  * 问题: 语句太多
/*
  一个人: name:"Tom", age: 12
   */
  // 先创建空Object对象
  var p = new Object()
  p = {} //此时内部数据是不确定的
  // 再动态添加属性/方法
  p.name = ‘Tom‘
  p.age = 12
  p.setName = function (name) {
    this.name = name
  }

  //测试
  console.log(p.name, p.age)
  p.setName(‘Bob‘)
  console.log(p.name, p.age)
方式二: 对象字面量模式  * 套路: 使用{}创建对象, 同时指定属性/方法  * 适用场景: 起始时对象内部数据是确定的  * 问题: 该方式的劣势比较明显,就是无法复用,如果创建大量同类型的对象,则代码会非常冗余
var p = {
    name: ‘Tom‘,
    age: 12,
    setName: function (name) {
      this.name = name
    }
  }

  //测试
  console.log(p.name, p.age)
  p.setName(‘JACK‘)
  console.log(p.name, p.age)

  var p2 = {  //如果创建多个对象代码很重复
    name: ‘Bob‘,
    age: 13,
    setName: function (name) {
      this.name = name
    }
  }
方式三: 工厂模式(利用内置对象的方式创建对象)  * 套路: 通过工厂函数动态创建对象并返回  * 适用场景: 需要创建多个对象  * 问题: 对象没有一个具体的类型, 都是Object类型,没办法判断类型


function createObj(name, age) { //返回一个对象的函数===>工厂函数
    var obj = {
      name: name,
      age: age,
      setName: function (name) {
        this.name = name
      }
    }

    return obj
  }

  // 创建2个人
  var p1 = createObj(‘Tom‘, 12)
  var p2 = createObj(‘Bob‘, 13)
console.log(p1.constructor) // Object 指向的构造函数是Object
console.log(p2.constructor) // Object 指向的构造函数是Object

  // p1/p2是Object类型
// 那么为什么说没办法判断类型呢?那么我们创建一条狗的对象
// 可以看出,狗的constructor也是指向Object,那么我们人和狗的类型就没办法去区分了
let dog = createObj(‘旺财‘,10)
console.log(dog.constructor) // Object 指向的构造函数是Object

  function createStudent(name, price) {
    var obj = {
      name: name,
      price: price
    }
    return obj
  }
  var s = createStudent(‘张三‘, 12000)
  // s也是Object
方式四: 自定义构造函数模式  * 套路: 自定义构造函数, 通过new创建对象  * 适用场景: 需要创建多个类型确定的对象  * 问题: 每个对象都有相同的数据, 浪费内存
function Person(name,age){
    // 1.系统自动创建对象,并且把这个对象赋值到this上,此步不需要我们操作
    // let this = new Object()

    // 2.给这个对象赋属性、方法,需要我们自己操作
    this.name = name
    this.age = age
    this.eat = function(){
        console.log(name + ‘吃饭‘)
    }

    // 3.系统自动返回创建的对象
    // return this
}

let p1 = new Person("邵威儒",28)
console.log(p1.constructor) // Person 指向的构造函数是Person

function Dog(name,age){
    this.name = name
    this.age = age
}

let dog = new Dog("旺财",10)
console.log(dog.constructor) // Dog 指向的构造函数是Dog
 默认是返回新创建的对象,特别需要注意的是  如果显式return一个对象数据类型,那么将来new的对象,就是显式return的对象 
// 当我们显式return一个原始数据类型
function Person(name,age){
    this.name = name
    this.age = age

    return "1"
}

let p = new Person("邵威儒",28) // { name: ‘邵威儒‘, age: 28 }

// 当我们显式return一个对象数据类型时
function Person(name,age){
    this.name = name
    this.age = age

    return [1,2,3]
}

let p = new Person("邵威儒",28) // [ 1, 2, 3 ]
// 我们发现,当显式return一个对象数据类型时,我们new出来的对象,得到的是return的值
方式六: 构造函数+原型的组合模式  * 套路: 自定义构造函数, 属性在函数中初始化, 方法添加到原型上  * 适用场景: 需要创建多个类型确定的对象
function Person(name, age) { //在构造函数中只初始化一般函数
    this.name = name
    this.age = age
  }
  Person.prototype.setName = function (name) { //共享方法绑定到prototype上
    this.name = name
  }

  var p1 = new Person(‘Tom‘, 23)
  var p2 = new Person(‘Jack‘, 24)
  console.log(p1, p2)
 

原文地址:https://www.cnblogs.com/lyt0207/p/12040352.html

时间: 2024-10-13 07:22:56

js对象的创建模式的相关文章

js对象的创建方式

js对象的创建方式: js也具有OOP编程思想,了解js对象,可以进一步了解js是如何面向对象编程的. js的创建对象方式: 1.   Object var a=new Object();a.name="jack";a.age=20;a.sayName=function () { console.log(this.name);} a.sayName();//打印jack 2.  字面量 var b={name:"rose",age:20,sayName:functi

js:对象的创建(基于组合和动态原型)

基于原型的创建虽然可以有效地完成封装,但是依然存在如下问题: 1.无法通过构造函数来设置属性值 2.当属性中有引用类型变量时,可能存在变量值重复 function Person(){ } Person.prototype = { constructor:Person, name:"Leon", age:30, friends:["Ada","Chris"], say:function(){ alert(this.name+"["

js对象2--工厂模式的由来--杂志

一:工厂模式引入前提例子 先看一个案例 1 <script type="text/javascript"> 2 var person= new Object(); //创建一个对象 3 person.name = "小龙哥"; //给对象添加一个name属性 4 person.sex = "男"; //给对象添加一个属性 sex 5 person.sayName = function(){ 6 alert("大家好我是:&q

js 对象的创建方式和对象的区别

js一个有三种方法创建对象,这里做一个总结. 1.对象直接量 所谓对象直接量,可以看做是一副映射表,这个方法也是最直接的一个方法,个人比较建议, 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 //创建简单对象 var obj1 = {}; //空对象 var obj2 = {   name: "ys",   age: 12 }; //创建复杂对象 var obj3 = {   name: "ys",   age

js对象的创建

//1 新建对象 var box = new Object(); box.name = "lee"; box.age = 100; box.run = function(){ return this.name+this.age+"运行中"; } alert(box.run()); //lee100运行中 //缺点:不能重复,如果再新建一个对象还要写大量重复代码 //2 工厂模式 function box(name,age){ var obj = new Object

JS对象的创建与使用

本文内容: 1.介绍对象的两种类型: 2.创建对象并添加成员: 3.访问对象属性: 4.利用for循环枚举对象的属性类型: 5.利用关键字delete删除对象成员 6.作为函数参数的对象: ★JavaScript对象有两种类型     1.Native:在ECMAScript标准中定义和描述,包括JavaScript内置对象(数组,日期对象等)和用户自定义对象: 2.Host:在主机环境(如浏览器)中实现并提供给开发者使用,比如Windows对象和所有的DOM对象: ★ 创建对象:定义空对象之后

JavaScript基础对象创建模式之单体/单例模式(Singleton)

首先,单例模式是对象的创建模式之一,此外还包括工厂模式.单例模式的三个特点: 1,该类只有一个实例 2,该类自行创建该实例(在该类内部创建自身的实例对象) 3,向整个系统公开这个实例接口 Java中大概是这个样子: class Singleton { //私有,静态的类自身实例 private static Singleton instance = new Singleton(); //私有的构造子(构造器,构造函数,构造方法) private Singleton(){} //公开,静态的工厂方

JS对象与PHP对象的对比

一.对象的创建与访问 1.JS对象的创建与访问 //方式一(通过内置构造函数创建后添加属性) var obj = new Object(); obj.name = 'Lucy'; //通过点添加属性 obj['sex'] = 'female'; //通过[]添加属性 //方式二(通过json格式直接创建添加属性) var obj = {'name':'lily','sex':'female'}; //js对象可通过'.'和'[]'访问属性 console.log(obj.name); conso

【JS】JavaScript中对象的创建与原型模式

 ECMAScript中没有类的概念,因此它的对象与基于类的语言中的对象有所不同. 1.理解对象 创建对象最简单的方式是创建一个Object实例,再为它添加属性和方法,如下: <span style="font-family:SimSun;font-size:12px;">var people = new Object(); people.age = 20; people.sayAge = function(){ alert(this.age); };</span