028 创建对象

编程思想

编程思想:把一些生活中做事的经验融入到程序中
面向过程:凡事都要亲力亲为,每件事的具体过程都要知道,注重的是过程
面向对象:根据需求找对象,所有的事都用对象来做,注重的是结果

面向对象特性:封装,继承,多态 (抽象性)
js不是面向对象的语言,但是可以模拟面向对象的思想
js是一门基于对象的语言:
万物皆对象:---------->程序猿 程旭媛

什么是对象?
看的见,摸得到,具体特指的某个东西

分析对象有什么特点:特征行为

对象:有特征和行为,具体特指的某一个事物

对象:有属性和方法,具体特指的某个事物

创建对象

创建对象三种方式:

1.调用系统的构造函数创建对象
var 变量名= new Object(); Object 是系统的构造函数 Array也是
2.自定义构造函数创建对象(结合第一种和需求通过工厂模式创建对象):先自定义构造函数,再创建对象
var obj=new 自定义构造函数();
3.字面量的方式创建对象

1.调用系统的构造函数创建对象

//实例化对象
        var obj = new Object();
        //对象有特征---属性和行为---方法
        //添加属性-----如何添加属性?    对象.名字=值;
        obj.name = "小苏";
        obj.age = 38;
        obj.sex = "女";
        //添加方法----如何添加方法?     对象.名字=函数;
        obj.eat = function () {
            console.log("我喜欢吃油炸榴莲凉拌臭豆腐和大蒜");
        };
        obj.play = function () {
            console.log("我喜欢玩飞机模型");
        };
        obj.cook = function () {
            console.log("切菜");
            console.log("洗菜");
            console.log("把菜放进去");
            console.log("大火5分钟");
            console.log("出锅");
            console.log("凉水过一下");
            console.log("放料,吃");
        };
        console.log(obj.name);//获取--输出了
        console.log(obj.age);
        console.log(obj.sex);
        //方法的调用
        obj.eat();
        obj.play();
        obj.cook();

2.自定义构造函数创建对象
自定义构造函数创建对象,我要自己定义一个构造函数,自定义构造函数,创建对象(实例化)
函数和构造函数的区别;名字是不是大写(首字母是大写

//系统函数定义的例子:
    function person(name,age) {
        var obj=new Object();
        obj.name=name;    //属性的定义不用this,方法的定义用this
        obj.age=age;
        obj.sayHi=function () {
            console.log("我叫:"+this.name+",年龄是:"+this.age);
        };
    }
    console.log(person instanceof Object);  //true
    //自定义构造函数创建对象,先自定义构造函数,再创建对象
    //自定义构造函数
    function Person(name,age) {
        this.name=name;    //属性和方法的定义都用this,,  不用Object,
        this.age=age;
        this.sayHi=function () {
            console.log("我叫:"+this.name+",年龄是:"+this.age);
        };
    }
    //自定义构造函数创建对象:先自定义一个构造函数,创建对象
    //创建对象  Person当成Object来使用
    var obj=new Person("小明",10);
    console.log(obj.name);
    console.log(obj.age);
    obj.sayHi();

    var obj2=new Person("小红",20);
    console.log(obj2.name);
    console.log(obj2.age);
    obj2.sayHi();

    console.log(obj instanceof Person);   //true
    console.log(obj2 instanceof  Person);   //ture


    //自定义狗的构造函数,创建对象
    function Dog(name,age,sex) {
        this.name=name;
        this.age=age;
        this.sex=sex;
    }
    var dog=new Dog("大黄",20,"男");
    console.log(dog instanceof Person);   //false
    console.log(dog instanceof Dog);     //true

自定义构造对象做了四件事:

1、在内存中开辟空间,存储创建的新的对象,开辟空间,占了两个空间,一个堆一个栈, 创建对象就是指向这个地址
2、把this设置为当前的对象
3、设置对象的属性和方法的值
4、把this这个对象返回

//创建一个图片的对象,图片有宽,有高,有大小(4M),图片可以展示内容
        //自定义构造函数
        function Img(width,height,size) {
            this.width=width;
            this.height=height;
            this.size=size;
            this.show=function(){
                console.log("展示图片内容");
            };
        }
        //创建对象=========实例化
        var obj=new Img();
        console.log(obj instanceof Img);   //true
    //创建一个小猫的对象,猫有颜色,体重,年龄,小猫可以抓耗子,可以打架
        function Cats(color,weight,age) {
            this.color=color;
            this.weight=weight;
            this.age=age;
            this.catchMouse=function () {
                console.log("抓耗子");
            };
            this.fight=function () {
                console.log("打架");
            };
        }
        var obj1=new  Cats();

3.字面量的方式创建对象

var obj2={  };  //空对象
        //添加属性
        obj2.name="haha";   //可以通过点语法添加属性
        obj2.age=18;
        //添加方法
        obj2.sayHai=function () {
            console.log("你好");
        }
        obj2.sayHai();


      //优化后的写法、
        var obj2={
            name:"苏苏",   //注意这里是逗号
            age:18,
            sayHai:function () {
                console.log("你好");
            },
            eat:function () {
                console.log("吃");
            },
        };
        obj2.sayHai();
        obj2.eat();

        ///字面量创建对象胡缺陷:一次性对象
        var obj3={
            name:"小花",
            age:18,
            sex:"女",
        };
        // obj3.name="小林";          //可以通过点语法更改属性
        obj3["name"]="小张";     //改变属性胡另外一种方法
        console.log(obj3.name);
    //点语法:  对象.名字=值     对象.名字=函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值