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点差异_高山我梦口香糖的博客-优快云博客_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