关于类constructor和构造函数以及prototype,_proto_之间关系的整理

constructor类构造和构造函数的用法区别

constructor是ES6的新功能,用于类class构造如:

class human{
    name;
    #age;
    constructor(name){
        this.name=name;
    }
    sayage(){
        console.log(this.#age);
    }
    sayname(){
        console.log(this.name)
    }
     setage(sage){
        this.#age=sage;
    }
}

tip:JavaScript中没有private定义私有变量,在ES11后添加了#来定义私有变量和方法; 

可以使用实例的constructor来返回类如:

let b =new a.constructor('nana')//等同于 let b=new person('nana');

构造函数如:

function person(name,age){
    this.name=name;
    this.age=age;
    sayhello:()=>{
        console.log('hello');
    }
}

与class类构造的区别在于:class必须要new操作符 否则会报错,而构造函数可以直接调用 但是只会返回函数内return的值,如果没有则为undefined

js类和构造函数的4点差异_高山我梦口香糖的博客-CSDN博客_js中构造函数和类的区别

此处再写一下构造函数和工厂模式的区别:

工厂模式:

//工厂模式,定义一个函数创建对象
function creatPerson (name, age) {
    var person = new Object(); 
    person.name = name;
    person.age = age;
    person.sayName = function () {
        alert(this.name);
    };
    return person; 
}

构造函数:

//构造函数模式,为对象定义一个构造函数
function Person (name, age) {
    this.name = name;
    this.age = age;
    this.sayName = function () {
        alert(this.name);
    };    
}

/*

 工厂模式就是批量化生产,简单调用就可以进入造人模式(啪啪啪……)。

 指定姓名年龄就可以造一堆小宝宝啦,解放双手。

 但是由于是工厂暗箱操作的,所以你不能识别这个对象到底是什么类型、

 是人还是狗傻傻分不清(instanceof 测试为 Object),

 另外每次造人时都要创建一个独立的temp对象,代码臃肿,雅蠛蝶啊。

*/

 而构造函数可以用用生产出来的p instanceof Person //返回true

prototype和_proto_

每个class都有显示原型prototype
每个实例都有隐式原型_proto_
实例的_proto_指向对应class的prototype

prototype属性的作用_zpfnext的博客-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值