javascript学习day07——关于对象的学习

Outline

创建对象三种方式

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

var 变量名 = new Object();//Object 是系统的构造函数

2.自定义构造函数创建对象(结合第一种和需求通过工厂模式创建对象)

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


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

 1   //实例化对象
 2     var person = new Object();
 3     //对象有特征——属性
 4     //对象有行为——方法
 5 
 6     //添加属性————如何添加属性?
 7     person.name = "KK";
 8     person.age = "18";
 9     person.sex = "";
10 
11     //添加方法/行为
12     person.eat = function(){
13         console.log("我喜欢吃香的,我是"+person.name);
14     };//记得加分号
15 
16     person.sleep = function(){
17         console.log("洗脸刷牙");
18         console.log("上床睡觉");
19     }
20 
21     //调用方法
22     person.sleep();

问题来了

如何一次性创建多个对象呢

 1     //一次性创建多个对象的方法:把创建对象的代码封装在一个函数中
 2     function createObject(){
 3         var obj = new Object();
 4         obj.name = "xx";
 5         obj.age = 10;
 6         obj.sayHi = function(){
 7             console.log("hi,我叫"+this.name+",我今年"+obj.age);
 8         };
 9         return obj;
10     }
11 
12      var per1 = createObject();//调用函数即可创建对象
13     per1.sayHi();

升级版(仍有缺陷)

这就是工厂模式,可以批量创建对象

 //升级版
    function updateCreate(name,age){
        var obj = new Object();
        obj.name = name;
        obj.age = age;
        obj.sayHi = function(){
            console.log("hi,我叫"+this.name+",我今年"+obj.age);
        };
        return obj;
    }
    //创建一个8岁的名为lucy的小孩
    var per2 = updateCreate("lucy",8);

2.自定义构造函数创建对象(结合第一种和需求通过工厂模式创建对象)

  2.1在内存中申请一块空闲的空间,存储创建新的对象

  2.2把this设置为当前的对象

  2.3设置对象的属性和方法的值

  2.4把this这个对象返回

 1     //自定义构造函数创建对象
 2     function Person(name, age){//P要大写
 3         this.name = name; //2.2 2.3
 4         this.age=age;
 5         this.sayHi = function(){
 6             console.log("我叫"+tihs.name);
 7         }
 8     }
 9     
10     var lucy = new Person("lucy",10);//2.4
11     var Tom = new Person("Tom",20);
12 
13     console.log(lucy instanceof Person);//true
14 
15     //自定义狗的构造函数
16     function Dog(name, age){
17     this.name = name;
18     this.age=age;
19     this.sayHi = function(){
20         console.log("汪汪 ,我叫"+tihs.name);
21     }
22     }
23     var jojo = new Dog("jojo",1);
24     
25     //可以区分对象是什么类型了
26     console.log(jojo instanceof Dog);//true
27     console.log(jojo instanceof Person);//false

对象创建的内存图 


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

var obj={};//空对象 用大括号

    //添加属性
    obj.name = "Niki";
    obj.age = 19;

    //添加方法
    obj.sayHi = function(){
        console.log("我是"+obj.name);//也可以写this.name
    }
    obj.sayHi();

优化后的:

   var obj2 = {
        name : "Sid",
        age :20,
        sayHi : function () {
            console.log("I'm "+this.name);//可以写this.name
        },
        eat:function () {
            console.log("eateat!")
        }
    }
    obj2.sayHi();

总结

字面量创建对象的缺陷:一次性创建对象,写死了,如果要修改属性值得去源码

js语言

是一门解释性语言

是一门脚本语言

是一门弱类型原因,声明变量用var

是一门基于对象的语言

是一门动态类型的语言

1.代码(变量)只有执行到这个位置的时候,才知道这个变量里面存储的是什么

比如,你在第100行写了var num = 10;那么你运行到100行了,浏览器才知道num是一个数字

2.对象缺什么,通过点语法,就能给他加什么。比如cat,要加个颜色,就cat.color="yellow";

    var obj = {
        name : 'zs',
        say : function(){

        }
    };
     
    //js的动态性,可以随时给对象添加成员
    obj.test = function () {

    }

访问属性的方法

1.jojo.name = "大黄";

2.jojo["name'] =  "大黄";

原文地址:https://www.cnblogs.com/xyishere/p/13682170.html