对象
1.面向对象中一个对象就是一个独立的功能块,但页面上同一个功能可能会有多处使用
2.类:把功能相似的代码归为一个类,当需要使用该功能时,通过类来生成相应的功能对象
工厂模式
最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
// 工厂模式
function HRBP(name,gender){
return{
name,
gender,
jobA(){
console.log('公司经营计划');
},
jobB(){
console.log('人事调动');
}
}
}
let 张三 = HRBP('rose','女')
console.log(张三);
张三.jobA()
复制代码
new运算符
new运算符专属于函数
new 运算:根据函数中的代码操作,实例化一个对象
- new 函数,默认情况下会返回一个对象
- new 运算时,函数中的 this 会指向实例化之后 对象
- new 运算时,会直接执行函数,可以不加(),除非需要传参
function HRBP(name,gender){
this.name = name;
this.gender = gender;
this.jobA=()=>{
console.log('公司经营计划');
}
}
let 李四 = new HRBP('李四','男') //如果不需要参数的话可以不加()
console.log(李四);
李四.jobA()
复制代码
原型、原型链
prototype 原型 (原型对象,类的原型)
==在工厂模式中当我们在定义不同的实例化对象并调用jobA函数时,每次都会重新创建实例化对象里面的jobA函数,这样就会造成性能问题==而在
JavaScript中
,每当定义一个函数数据类型(普通函数、类)时候,都会天生自带一个prototype
属性,这个属性指向函数的原型对象
。原型对象就相当于一个公共的区域,所有同一个类的实例化对象都可以访问到这个原型对象,所以
我们可以将对象中共有的内容,统一设置到原型对象中。
// 原型
/*
function HRBP(name,gender){
this.name = name;
this.gender = gender;
this.jobA=()=>{
console.log('公司经营计划');
}
}
let 李四 = new HRBP('李四','男');
let 张三 = new HRBP('张三','男');
console.log(李四.jobA === 张三.jobA); //false
*/
function HRBP(name,gender){
this.name = name;
this.gender = gender;
}
HRBP.prototype.jobA=()=>{
console.log('公司经营计划');
}
let 李四 = new HRBP('李四','男');
let 张三 = new HRBP('张三','男');
console.log(李四.jobA === 张三.jobA); //true
复制代码
原型链:对象的
__proto__
属性,在__proto__ 属性中,存储的时其构造函数的原型对象的引用地址。当我们调用对象的某个属性或方法时,在对象自身找不到就会去找对象的
__proto__
属性,然后通过__proto__
访问到其构造函数的原型链。直到找到Object
对象的原型,Object对象的原型没有原型,如果在Object原型中依然没有找到,则返回undefined。
Object.prototype.jobC = ()=>{
console.log('支付薪水');
}
function HRBP(name,gender){
this.name = name;
this.gender = gender;
}
HRBP.prototype.jobA=()=>{
console.log('公司经营计划');
}
let 李四 = new HRBP('李四','男');
let 张三 = new HRBP('张三','男');
console.log(李四.jobA === 张三.jobA); //true
张三.jobC();
复制代码
原型与原型链图片:
==原型:==
==原型链==
本文为博主原创文章,不得用于商业用途,转载请注明出处,谢谢。
本文链接:blog.csdn.net/zxhzm_life/…
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END