ES6对象

1.1 新增技巧

1.属性简写:属性名和属性值相同,只写属性名即可。

2.方法简写:方发名和方法相同,只写方法即可。

function createUser(loginId,loginPwd,nickName){
    const say=function(){
        console.log(loginId,nickName);
    }
    return{
        loginId,//1.属性简写
        loginPwd,
        nickName,
        say,//2.方法简写
        fun(){
            console.log(this.loginId)
        }
    }
}
const user=createUser("01","123456","abc");
console.log(user);



3.计算属性名:对象的属性名可以引用变量值。

//3.计算属性名

const prop1="name";
const prop2="age";
const prop3="say";
const user={
    [prop1]:"张三",
    [prop2]:30,
    [prop3](){
        console.log(this[prop1],this[prop2])
    }
}
console.log(user);

1.2 新增API

1.is()  判断两个值是否相等,类似于===,除了NaN和0。

// 1.is()
console.log(Object.is(NaN,NaN))//true
console.log(Object.is(+0,-0))//false
console.log(Object.is({},{}))//false
console.log(Object.is(1,2))//false

2.assign()用于混合对象,带浅克隆。

//2.assign()
const obj1={
    a:123,
    b:456,
    c:789
}
const obj2={
    a:789,
    b:"abc"
}
//参数个数不定
const obj=Object.assign({},obj1,obj2)
console.log(obj)

3.getOwnPropertyNames()获取对象的属性名,返回一个数组,数组中的数据会枚举出来对象的属性。

3.getOwnPropertyNames()
const obj={
    e:1,
    a:2,
    c:3,
    b:4,
    0:5,
    3:6,
    1:7
}//对象的属性渲染顺序会按照浏览器厂商规定
const arr=Object.getOwnPropertyNames(obj)
console.log(arr)

4.setPropertypeOf()设置对象的隐式原型。

//4.setPrototypeOf()
const obj1={
    a:1
}
const obj2={
    b:2
}
//obj1.__prop__=obj2//必须通过构造函数来完成
Object.setPrototypeOf(obj1,obj2)
console.log(obj1)

 1.3 面向对象:class 类

1.面向对象和面向过程的思想

//面向过程:只注重过程(几步),功能较小
//1.打开冰箱门
function openFridge(){}
//2.把大象放进去
function elephantIn(){}
//3.关上冰箱
function closeFridge(){}



//面向对象:主要考虑对象个数,对象的参数和方法,针对大型项目和大型模块
function Elephant(){
    this.tiji=tiji;
}
function Frifge(){
    this.width=width;
}
Fridge.prototype.opDoor=function(){}
Fridge.prototype.closeDoor=function(){}
Fridge.prototype.join=function(){}
let fridge=new Fridge()
let ele=new Elephant()

fridge.openDoor()
fridge.join(ele)
fridge.closeDoor()

2.class类的创建

class Person{
    constructor(job,name,age,sex){
        this.job=job;
        this.name=name;
        this.age=age;
        this.sex=sex;
        //this.print=function(){
        //    console.log("实例方法")
//console.log(`姓名:${this.name},工作:${this.job},年龄:${this.age},性别:${this.sex}`)
        //}
    }
    print(){
        console.log("原型方法")
console.log(`姓名:${this.name},工作:${this.job},年龄:${this.age},性别:${this.sex}`)
    }
}
const p1=new Person("程序猿","jack","25","男")
p1.print()
  • 类的声明不会被提升,和let,const一样,有暂时性死区
  • 类的所有代码全部都是在严格模式下执行
  • 类的所有方法不可被枚举
  • 类的所有方法无法当成构造函数使用
  • 类的构造器必须用new来调用

3.使用的注意点

  • 可以写成计算属性名
  • 可以使用getter和setter方法
  • 静态成员:只属于自己所有,不能够被实例出来给其他人共享
  • 静态成员属于整个类,即使没有实例化对象,类的静态成员也存在
  • 普通成员属于一个具体的对象,而只有当这个对象被创建了,普通成员才会被分配内存
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值