面向对象编程

1.面向对象的概念

ES有两种开发模式:
1). 函数式
2). 面向对象(OOP)
类:是对象的类型模版
实例:是根据类创建的对象
对象的组成:属性 方法

2.创建对象

**1).  根据实例创建**
var obj = new Object();//创建对象实例
        //新增属性
        obj.name='里打哈';
        obj.age=199;

        //添加方法
        obj.show=function(){
            console.log('哈哈哈,展示.........');
        };
**2).  字面量的创建:**
var obj = {};//实例

        obj.name = '赵露思';
        obj.show = function () {
            console.log('哈哈哈,我是老赵');
        };

3). 工厂函数创建对象

function createStudent(name,age){
            var obj = new Object();
            obj.name = name;
            obj.age = age;
            obj.text = function(){
                console.log(this.name + "在考试,勿扰");
            }
            return obj;
        }
        var obj1 = createStudent('沐沐',21);
        var obj2 = createStudent('小沐',3);
        console.log(obj1,obj2);

优点:可以批量生产对象
缺点:代码相对复杂,会对每一个对象都新增方法
4). 构造函数
是最常用的一种批量创建对象的方式
特点:
1.函数名大写
2.构造函数需要通过new调用
3.构造函数没有return语句

function Dog(name,color,age){
            this.name = name;
            this.color = color;
            this.age = age;
            this.dogTech = function(){
                console.log(this.name + '在抓猫');
            }

        }

        var sen =new Dog('dada','绿色',18);
        var sen2 =new Dog('tata','粉色',28);
        console.log(sen,sen2);

优点:代码量比工厂函数少
可以批量生产,解决对象识别问题
缺点:内存浪费

5). 原型创建对象
1.原型—prototype:所有对象都有原型属性,原型是一个对象,放入原型中的内容是 共有的
2.proto 每一个对象的实例都有proto属性,该属性执行原型对象
3.constructor 原型对象的constructor指向构造函数

<script>
        function Student(){}

        Student.prototype.name = '二狗';
        Student.prototype.say = function(){
            console.log(this.name +'说话中……');
        }
        var s = new Student();
        console.log(s);
        s.say();

    </script>

6). 混合模式创建对象
构造函数+原型
在构造函数中完成属性的添加,在原型中添加方法
是一种较为理想的创建对象的模式

<script>
        function Student(name,age,sex){
            this.name = name;
            this.age = age;
            this.sex = sex;
           
        }
        Student.prototype.say = function(){
                console.log(this.name + '说森森太坏了');
            }
        var s = new Student('乐乐',18,'男');
        console.log(s);
        s.say();


    </script>

7). 动态混合模式

function Person(name, age, addr) {
            this.name = name;
            this.age = age;
            this.addr = addr;
            if (!this.say) {//若say方法没有被添加过,则添加
                Person.prototype.say = function () {
                    console.log(this.name + "说话中....");
                };
            }

        }



        var s = new Person('李四', 20, '航海路');
        console.log(s);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值