面向对象基础

基础

什么是面向对象: 面向对象它是一个编程思路,不会改变我们预期的效果。

优点: 使用面向对象,会让代码的复用性大大的提高,便于迭代

对比:

面向过程:小花去食堂点餐吃饭。
面向对象:小花-去-吃 、    食堂-点餐 
		 小花.去   食堂.点餐   小花.吃 

创建对象的两种方式:

  1. 字面量
	let nan = "性别";
    let obj = {
        name:"小涛",
        nan:"男",
        age:"17",
        hobby:function(){
            console.log("喜欢做题");
        }
    };
  1. 通过构造函数
	let obj2 = new Object();

对象的使用:

  1. 通过点语法
    console.log(obj.name);
  1. 通过中括号
console.log(obj["nan"]);

上述两者的区别: 如果通过点语法无法获取到对象中“正确”的属性/方法名,可以使用中括号的方式来获取

工厂模式

创建对象的第三种方式: 工厂模式

	function Person(name,age,sex,fn){
       // 1. (形参) --> 运输材料

       //2. 创建对象并赋值 --> 加工材料
        let obj = {};
        obj.name = name;
        obj.age = age;
        obj.sex = sex;
        obj.hobby = fn;
        return obj;  
       // 3. 出厂
    }
    function fn(){
       console.log("我是一个兵,来自老百姓");
    }

	let dada = Person("光达","18","男");
	let daxian = Person("大仙","20","男",fn);
    console.log(dada.sex);
    console.log(daxian.name);
    daxian.hobby();

构造函数

创建对象的第四种方式:构造函数——函数名的首字母 需要大写, 以此来和普通函数进行区别

	function Person(name,age,sex,fn){
       
        this.name = name;
        this.age = age;
        this.sex = sex;
        this.hobby = fn;
    }

    //  new运算符:  也叫做new构造器, 配合使用的函数,被称为构造函数
    let obj = new Person();

new运算符

作用:

  1. 执行该函数
  2. 隐式创建一个对象
  3. 把该对象和函数的 this指向 互相绑定
  4. 可以把this中的属性和方法都加到 该对象上
  5. 函数执行后,返回该对象
		function txt(name){
            this.name = name;
            this.age = age;
            this.sex = sex;
            this.hobby = function(){
                console.log("我是一个兵");
            }
        }

实例化对象:

   let obj = new txt("阿");
   console.log(obj.name);

原型

每次通过构造函数去实例化对象,都会生成一个新的内存空间
当项目开发中,往往大量的内存使用,会严重影响性能

原型: 将公有的方法,放到原型中,每次实例化对象,原型中的内容是公有的,不会再分配新的空间给对象 (构造函数中的属性/方法 会)

	function Person(name,sex){   
        this.name = name;
        this.age = age;
        this.sex = sex;
        this.hobby = function(){
            console.log("喜欢游泳~");
        };
    }
    
	Person.prototype.s = function(){
        console.log(this.sex);
    } 

    Person.prototype.e = eat;
    function eat(){
        console.log(`我${this.name}饿了`);    
    }
    
    let san = new Person("张三","男");
	console.log(san.name); // 张三
	san.s();	// 男
	san.e();	//我张三饿了

	let lisi = new Person("李四","女");
    let MaZi = new Person("麻子","未知");
    console.log(lisi.name); //李四
    console.log(san.name);	//张三
    lisi.s();	//女
    lisi.e();	//我李四饿了

原型中的方法,地址相同,是一个公有的内存

console.log(san.e === lisi.e);// true

构造函数中的方法,地址不相同。 两个独立的内存

console.log(san.hobby === lisi.hobby);	// false
san.hobby();	//喜欢游泳
lisi.hobby();	//喜欢游泳

输出一下对象的__proto__ === Person.prototype

console.log(MaZi.__proto__ === Person.prototype);//true
console.log(Person.prototype.constructor === Person);// true
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值