javascript面向对象(一)

对象

1.面向对象中一个对象就是一个独立的功能块,但页面上同一个功能可能会有多处使用

2.类:把功能相似的代码归为一个类,当需要使用该功能时,通过类来生成相应的功能对象

工厂模式

最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

// 工厂模式
        function HRBP(name,gender){
            return{
                name,
                gender,
                jobA(){
                    console.log('公司经营计划');
                },
                jobB(){
                    console.log('人事调动');
                }
            }
        }
        let 张三 = HRBP('rose','女')
        console.log(张三);
        张三.jobA()
复制代码

new运算符

new运算符专属于函数
new 运算:根据函数中的代码操作,实例化一个对象

  1. new 函数,默认情况下会返回一个对象
  2. new 运算时,函数中的 this 会指向实例化之后 对象
  3. 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
喜欢就支持一下吧
点赞0 分享