2019-06-01 js第七天

01对象初体验

//1.变量:本质上 就是 内存里的一块空间 ,一次只能存一个数据

    var age = 18;

    //2.数组:本质上 就是 内存里 连续的N个空间,可以 存放多个 数据

    //        三要素: 元素、下标、legnth

    //3.函数:半只上 也是 内存里的 一块空间,只不过存的是 【代码】

    //4.对象:超级容器,可以存放所有东西 -- 变量、数组、函数、对象

    //  对象的成员,包括 属性 和 方法

    //4.1 对象的属性:就是 对象里的 “变量”,用来 保存 数据

    //4.2 对象的方法:就是 对象里的 “函数”,用来 保存 代码

    var bzDuiXiang = {

      // 对象的属性

      gfName: '小川川',

      gfAge: 35,

      gnfGeder: true,

      childNames: ['小小川', '小小波'],

      // 对象的 方法

      sayHi: function () {

        console.log('Hi~大家好~~我是 班长的 小可爱~~~');

      }

    };

    bzDuiXiang.sayHi();

02对象成员的访问

  //1.对象:超级容器,可以存放所有东西 -- 变量、数组、函数、对象

    //  对象的成员,包括 属性 和 方法

    //1.1 对象的属性:就是 对象里的 “变量”,用来 保存 数据

    //1.2 对象的方法:就是 对象里的 “函数”,用来 保存 代码

    var bzDuiXiang = {

      // 对象的属性

      gfName: '小川川',

      gfAge: 35,

      gfGender: true,

      childNames: ['小小川', '小小波'],

      // 对象的 方法

      sayHi: function () {

        console.log('Hi~大家好~~我是 班长的 小可爱~~~');

      }

    };

    //2.访问 对象 里的属性 ---------------------------------------------------

    console.log(bzDuiXiang.gfName);

    console.log(bzDuiXiang.gfAge);

    console.log(bzDuiXiang.gfGender);

    console.log(bzDuiXiang.childNames);

    //2.1 访问 对象中 不存在的属性时,返回 undefined

    console.log(bzDuiXiang.money); // undefined

    //3. 调用 对象的 方法

    bzDuiXiang.sayHi();

    // 打印整个对象

    console.log(bzDuiXiang);

03为对象添加成员

//1.对象:超级容器,可以存放所有东西 -- 变量、数组、函数、对象

    //  对象的成员,包括 属性 和 方法

    //1.1 对象的属性:就是 对象里的 “变量”,用来 保存 数据

    //1.2 对象的方法:就是 对象里的 “函数”,用来 保存 代码

    var bzDuiXiang = {

      // 对象的属性

      gfName: '小川川',

      gfAge: 35,

      gfGender: true,

      childNames: ['小小川', '小小波'],

      // 对象的 方法

      sayHi: function () {

        console.log('Hi~大家好~~我是 班长的 小可爱~~~');

      }

    };

    //2.修改 对象 属性值 ----------------------------------------------------------

    bzDuiXiang.gfName = '小东东';

    console.log(bzDuiXiang.gfName);

    //3.为 对象 动态添加 属性------------------------------------------------------

    //  语法:对象.要添加的属性名 = 属性值;

    bzDuiXiang.money = 15000;

    console.log(bzDuiXiang.money);


    bzDuiXiang.height = 160;

    console.log(bzDuiXiang.height);

    //4.为 对象 动态添加 方法 -----------------------------------------------------

    bzDuiXiang.beatBF = function(){

      console.log('竟敢在外面偷瞄其他男生,打死你个龟孙~~~~~');

    };

    // 调用 添加的 方法

    bzDuiXiang.beatBF();

    // 打印整个对象

    console.log(bzDuiXiang);

04删除对象里的成员

var benLaoPo = {

        name : '小笨蛋',

        cook : function(){

          console.log('做的菜真难吃~~~');

        }

      };

      console.log(benLaoPo.name);

      benLaoPo.cook();

      // 无法 通过 设置为 null 来 删除对象里的成员

      // benLaoPo.cook = null;

      // benLaoPo.cook();

      //1. delete 关键字:用来 删除 对象 里的成员

      // 删除 对象里的方法

      delete benLaoPo.cook;

      // 删除 对象里的 属性

      delete benLaoPo.name;


      console.log(benLaoPo);

05对象的中括号访问法

// var arr = ['P城', 'R城', '军事基地'];

    // console.log(arr[0]);

    // console.log(arr);

    var girlFriend = {

      gfName: '小静',

      age: 21,

      gender: false,

      xcook: function () {

        console.log('做菜简直就是 金顶厨师的水平~~~~');

      },

      run: function () {

        console.log('每天晚上跑跑步~~~~');

      }

    };

    girlFriend.angry = function () {

      console.log('你又说我的菜不好吃,我很生气,明天你就不要回来了~~~!');

    };

    //1.使用 . 来访问 对象的成员 -------------------------------------------------------

    console.log(girlFriend.gfName); // '小静'

    console.log(girlFriend.age);    // 21

    girlFriend.xcook(); // '每天晚上跑跑步~~~~'

    //2. 【中括号访问法】使用 [] 来访问 对象的成员 --------------------------------------

    //  除了 数组 可以通过 [下标] 来访问 元素

    //  对象 也可以 通过 ['属性名'] 来访问 对应的 属性值

    console.log(girlFriend);

    // 2.1 使用 中括号 来访问 对象里的 属性        --------------------------------------

    //    语法:对象['属性名'] 来访问 对应的 属性值

    console.log('------------------------------');

    console.log(girlFriend['gfName']); // -> girlFriend.gfName -> '小静'

    console.log(girlFriend['age']);    // -> girlFrined.age    ->  21

    console.log(girlFriend['gender']); // -> girlFrined.gender -> false

    // 2.2 使用 中括号 来访问 对象里的 方法        --------------------------------------

    //    语法:对象['方法名']();  来 调用对应的 方法代码

    // girlFriend.xcook( ); // 使用 对象. 调用方法

    girlFriend['xcook']( );

06使用in关键字来判断对象中是否存在某个成员

var stuInfo = {

      name: '小白',

      age: 18,

      gender: false,

      sayHi: function () {

        console.log('你好呀~~~');

      }

    };

    //1. in 关键字:用来判断 对象中 是否 存在 某个成员

    //      返回值:bool值,如果 对象中 存在 指定的属性 ,返回true,否则返回 false

    console.log('name' in stuInfo); // true

    console.log('age' in stuInfo); // true

    console.log('gender' in stuInfo); // true

    console.log('sayHi' in stuInfo); // true

    console.log('hobby' in stuInfo); // false

07显示用户输入的属性值

var girlFriend = {

        gfName: '小静',

        age: 21,

        gender: false,


        xcook: function () {

          console.log('做菜简直就是 金顶厨师的水平~~~~');

        },

        run: function () {

          console.log('每天晚上跑跑步~~~~');

          //return undefined;

        }

      };


      // 0.1 通过 中括号 访问法  访问对象的属性值

      // var proValue = girlFriend['age'];

      // console.log(proValue);


      //0.2 通过 .访问法  访问对象的属性值

      // var proValue2 = girlFriend.age;

      // console.log(proValue2);


      //1.接收用户输如的 属性名 - 假设用户 输入的 是 'gfName'

      var proName = prompt('请输入您要访问的 属性 的名字:'); //相当于 : var proName = 'gfName'


      //2.根据用户书输入的属性名 获取 对应的 属性值

      var proValue = girlFriend[proName]; //相当于 : var proValue = girlFriend['gfName']

      //                                    相当于 : var proValue = girlFriend.gfName;   

      //  打印 属性值

      console.log(proValue);

08使用for-in方法遍历对象的成员

// var arr = [1, 2, 4, 6, 2, 12];

    // for (var i = 0; i < arr.length; i++) {

    //  console.log(arr[i]);

    // }

    var stuInfo = {

      name: '小白',

      age: 18,

      gender: false,

      sayHi: function () {

        console.log('你好呀~~~');

      }

    };

    // 【前言:遍历对象里的成员 无法使用 下标,因为 对象没有下标,只有  成员名 和 成员值

    //      所以,可以 通过 for in 获取 对象中 每个 成员的名字,然后结合 对象成员中括号 访问法 获取 成员的值】


    // 0. for(var key in obj){  }  ---------------------

    //    for in 语法 专门用来 遍历 对象 里的每个成员

    //    a.  key 是 每次 循环 获取 到的 对象obj 里的成员 的 名字 字符串

    //    b.  obj[key] 可以 获取 对应成员 的值

    //1.遍历 对象 里的成员 ---------------------------------------

    //1.1 获取 对象 里的 每个 成员的 名字

    for (var k in stuInfo) {

      // 但因 k 的值 和 类型

      console.log('k = ' + k + ',typeof k =' + typeof (k));

      //注意:获取 对应的 属性值

      var v = stuInfo[k];

      console.log('v = ' + v);

    }

    //1.2 通过 对象中括号 访问法,根据 成员名 获取 成员的值

    // stuInfo['gender']

09创建对象的几种方法补充

//1. new 的方式 创建对象 --------------------------------

    //1.1 创建 空 对象

    var obj = new Object();

    //1.2  创建 带 初始 成员的 对象

    var obj2 = new Object({

      age: 1,

      name: '小白',

      sayHi: function () {}

    });

    //2. { } 字面量 方式 创建 对象----------------------------

    //2.1 创建 空 对象

    var obj = {};

    console.log(obj);

    //2.2 创建 带 初始 成员的 对象

    var obj2 = {

      //a.属性

      age: 18,

      gender: true,

      //b.方法

      sayHi: function () {

        console.log('你好~~~');

      },

      beRich: function () {

        console.log('睡觉,做梦~~~');

      }

    };

10js中的this关键字

    //1. 函数内部 有两个 js基础阶段 要掌握的 特殊属性: arguments 和 this

    //                                    本质上来说:他们俩 就是 函数内部的两个 特殊的 变量!!!

    //                                    arguments中 存的 是 实参列表:所在函数被调用时,传入的 数据,都自动存入了 arguments 属性中

    //                                    this 是在函数被调用时,保存了所处的 作用域!!!

    // 【this口诀】 函数方法 在调用的时候,谁点.出的这个方法,方法中的this就是谁!!!

    // this:就是函数内部的一个特殊的属性,本质上就是一个 变量而已

    // this 到底是谁:调用方法时,谁点.出的方法,那么方法里的this就是谁!!!

    //1.1 全局函数里的 this -- 特殊:所有的全局变量、全局函数 都是 属于 window对象(全局作用域)-----------

    var loverName = '小静静';

    function showLove() {

      console.log('i love dog~~~');

      console.log(this);

    }

    //    完整的调用语法,应该是 window.方法();

    window.showLove();

    console.log(window.loverName);

    //    特殊:凡是 属于 window(全局作用域)的成员,调用时 都可以 省略 window.

    showLove(); // --> js引擎 在执行代码时,会 自动改成: window.showLove();

    //                                    所以,一般情况下,全局函数方法 里面的 this 都是 window!!!

    console.log('-------------------------------');

    console.log('-------------------------------');

    //1.2 在自定义对象的 方法里的 this --------------------------------------------------------

    // function StuInfo(stuName, stuAge, stuGender) {

    //  this.name = stuName;

    //  this.age = stuAge;

    //  this.gender = stuGender;

    //  this.sayHi = function () {

    //    console.log('汪汪~~~' + this.name);

    //  }

    // }

    var stu = {

      name: '小ruikey',

      age: 1,

      gender: false,

      sayHi: function () {

        console.log('汪汪~~~~' + this.name);

      }

    };

    console.log(stu.name);

    console.log(stu.age);

    console.log(stu.gender);

    // 【this口诀】 函数方法 在调用的时候,谁.出的这个方法,方法中的this就是谁!!!----------------

    // 下句代码中 ,sayHi 方法 里的 this 就是 stu 对象!!!

    stu.sayHi();

    console.log('window.stu.sayHi(); ----');

    window.stu.sayHi();

  11批量创建对象:工厂函数

// var stu1 = {

    //  name: '小白',

    //  age: 21,

    //  gender: true,

    //  sayHi: function () {

    //    console.log('我是小白~~');

    //  }

    // };

    // var stu2 = {

    //  name: '小黑',

    //  age: 23,

    //  gender: false,

    //  sayHi: function () {

    //    console.log('我是小黑~~');

    //  }

    // };

    //简单工厂模式 -- 批量生产 对象

    //工厂函数:每次调用,内部都会 创建一个对象,并 设置好 属性的值(一般通过形参传入),最后返回 这个对象 给 调用者

    // 1.用来创建 一个 学员对象 的 方法 --------------------------------

    function createStuInfo(stuName, stuAge, stuGender) {

      //1.1 创建对象 并设置 属性值

      var obj = {

        name: stuName,

        age: stuAge,

        gender: stuGender,

        sayHi: function () {

          console.log('我很喜欢你~~~~');

        }

      };

      //1.2 将 对象 返回

      return obj;

    }

    //2.使用工厂函数 创建2个对象----------------------------------------

    var stu1 = createStuInfo('小白', 18, false);

    console.log(stu1);

    var stu2 = createStuInfo('小黑', 21, true);

    console.log(stu2);

12批量创建对象:new和构造函数

//1. 工厂方式 批量创建对象 ---------------------------------------------

    function createStuInfo(stuName, stuAge, stuGender) {

      //1.1 创建一个 空对象

      var obj = new Object();

      //1.2 动态 的 为 空对象 添加 成员

      obj.name = stuName;

      obj.age = stuAge;

      obj.gender = stuGender;

      obj.sayHi = function () {

        console.log('我很喜欢你~~~~');

      };

      //2. 将 添加了成员的  对象 返回

      return obj;

    }

    //2.【构造函数】:就是用来 批量创建对象的一个种函数写法 -----------------------------------------

    //      命名规范:首字母 都 大写 ,一般用 名词

    //      用法:通过 new 关键字 来调用

    function StuInfo(stuName, stuAge, stuGender) {

      this.name = stuName;

      this.age = stuAge;

      this.gender = stuGender;

      this.sayHi = function () {

        console.log('我很喜欢你呀~~~小狗狗');

      }

    }

    //【强调】构造函数 不是用来 直接 调用的!而是 给 new 来调用的!!!

    // var a = StuInfo(); // var a =  undefined;

    //2.1 通过 new 关键字 来 调用 构造函数 -----------------------------------------

    //  【看不到的细节】 new 关键字 做的四个事情:

    //  2.1 偷偷的 创建一个 空对象

    //  2.2 偷偷的 将 空对象 传给 被调用的 构造函数 里的 this

    //  2.3 调用 构造函数,调用完后,空对象里 就有了 各种 属性 和 方法

    //  2.4 返回 对象

    var stu1 = new StuInfo('小狗狗', 1, false);

    var stu2 = new StuInfo('小猫猫', 2, true);

    stu1.sayHi();


    console.log(stu1);

    console.log(stu2);

13模拟new关键字

function StuInfo(stuName, stuAge, stuGender) {

      this.name = stuName;

      this.age = stuAge;

      this.gender = stuGender;

      this.sayHi = function () {

        console.log('我很喜欢你呀~~~小狗狗');

      }

    }


    //---------------模拟 new 关键字的 4个事情!!!!-----------

    // 【了解就可以,后面 js高级会详细讲解~~!!!!!】

    function myNew() {

      //  【看不到的细节】 new 关键字 做的四个事情:

      //  2.1 偷偷的 创建一个 空对象

      var obj = {

        flag: '我是空对象,不要理我~~~'

      };

      //  2.2 偷偷的 将 空对象 传给 被调用的 构造函数 里的 this

      //  2.3 调用 构造函数,调用完后,空对象里 就有了 各种 属性 和 方法

      StuInfo.call(obj, '小白', 18, false);

      //  2.4 返回 对象

      return obj;

    }

    var o = myNew();

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,922评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,591评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,546评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,467评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,553评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,580评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,588评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,334评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,780评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,092评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,270评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,925评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,573评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,194评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,437评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,154评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容

  • 单例模式 适用场景:可能会在场景中使用到对象,但只有一个实例,加载时并不主动创建,需要时才创建 最常见的单例模式,...
    Obeing阅读 2,063评论 1 10
  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 7,744评论 2 17
  • var a = 1; console.log(typeof a);// 'number' var b = '1';...
    zdnexus阅读 328评论 0 0
  • (一)函数 1.函数基本声明 function fun([参数1],[参数2],...){ 函数体; }; 2....
    妖妖灵嘛0阅读 290评论 0 0
  • title: js面向对象date: 2017年8月17日 18:58:05updated: 2017年8月27日...
    lu900618阅读 568评论 0 2