第八章 对象(创建对象的几种方法,单身狗狂喜)

221 阅读3分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动

前言

没有枪没有炮敌人给我们造,没有对象我们自己new,手动狗头!

常用的内置对象:

-   Object
-   Array
-   Date
-   Function
-   RegExp

创建对象的几种方式

1. 普通方式

栗子:


const player = new Object() // 创建一个空对象 
player.color = 'white' 
player.start = function(){ 
    console.log('白色开始下棋')
}

缺点

容易出现代码冗余

优化

我们可以引入工厂模式:

function CreateObject(color){ 
    const player = new Object() 
    player.color = color 
    player.start = function(){ 
        console.log(`${color}开始下棋`) 
    } 
    return player 
} 
const white = CreateObject('white')
const black = CreateObject('black') 
const red = CreateObject('red')

用 new Object() 进行创建有一点缺点就是我们无法明确 创建出来的对象有什么类型,无法直观的进行维护

2. 构造函数/实例

什么是函数?

按照犀牛书的说法,函数简单的说就是重复执行的代码块。函数是这样的一段JavaScript 代码,它只定义一次,但可能被执行或调用任意次。

什么是构造函数:

通过  new 函数名,来实例化对象的函数叫构造函数。任何的函数都可以作为构造函数存在。之所以有构造函数与普通函数之分,主要从功能上进行区别的,构造函数的主要 功能为 初始化对象,特点是和new 一起使用。
new就是在创建对象,从无到有,构造函数就是在为初始化的对象添加属性和方法。构造函数定义时首字母大写(规范)

构造函数的缺点:

通过this添加的属性和方法,总是指向当前对象的,所以在实例化的时候,通过this添加的属性和方法都会在内存中赋值一份造成内存的浪费。。。

构造函数的优点:

我们修改了任何一个对象的属性,并不会影响其他的方法,实例化的时候是在内存中赋值了一次。。。
这是不是真的? 让我们输出一下就知道了

function company() { 
    this.start = function(){ 
        console.log('白色开始下棋') 
    } 
} 
const a = new company() 
const b = new company() 
a.start === b.start // false

3. 原型对象

首先我们先看一下下面的代码输出:


function company(color) { 
    this.color = color 
}
// 在 company 的原型对象下进行设值
company.prototype.start = function(){ 
    console.log('颜色') 
} 
const a = new company('a') 
const b = new company('b') 
a.start === b.start // true

无论我们new多少个 company 实例出来,xxx.start === xxx.start 始终等于 true

为什么呢?我们这样输出的时候, start 始终在原型链上,我们实例化的方法都是指向 prototype.start 所以会设置为true

通过原型对象进行赋值的好处是什么?坏处又是什么?

好处:

通过原型的方式,每生成的一个实例,都不会在内存中开辟一块新的存储空间

坏处:

不利于代码的维护

4. 静态属性

是绑定在构造函数上的属性⽅法,需要通过构造函数访问

先给大家一个小栗子


class Test { 
    static age add(){ 
        if(!Test.age) Test.age = 0 
        Test.age ++   //静态属性 
     }
} 
Test.age // undefined -- 此时 age还未被赋值 
var c1 = new Test() // 初始化 Test 
c1.add() // 为age进行赋值 
c1.age // undefined 
Test3.age // 1

或者


function Player(){ 
    if(!Player.num){ 
        Player.num = 0 
    } 
    Player.num++ //静态属性 
} 
var p1 = new Player()
var p2 = new Player() 
var p3 = new Player() 
Player.num // 3

总结

我们归纳了四种创建对象的方式,大家可以按照自己的喜好去创建对象了,泪奔!
求关注!求收藏!求点赞 u=945999832,3434885325&fm=26&fmt=auto.webp