首页 > 其他 > 详细

对象和包装类

时间:2020-03-06 23:17:50      阅读:59      评论:0      收藏:0      [点我收藏+]
  1. 对象

(一)对象说明

var 对象名 = {

属性名:属性值

}

① 属性值可以是任何类型,属性值为函数时,是一个方法

② 每个属性之间用逗号隔开,最后一个属性不要写逗号

③ 在方法中调用对象的属性,要加上对象名.属性名(这里的对象名可以用this替换,即this.属性名,这里的this是第一人称)

(二)对象的操作

① 增:对象名.要添加的属性名 = ‘要添加的属性值’

② 查:对象名.要查看的属性名

③ 改:对象名.要修改的属性名 = ‘要修改的属性值’

④ 删:delete 对象名.属性名

⑤ 对象的操作代码展示

 

 

        var seeMovie = {

            movie:‘霸王别姬‘,

            newMovie:"",

            downloadMovie:function(){

                this.movie = this.newMovie;

                this.newMovie = "";

            },

            uploadingMovie:function(uMovie){

                this.newMovie = uMovie;

            },

            deleteMovie:function(){

                delete this.movie;

                this.movie = "";

            }

        }

 

 

 

(三)当一个对象的属性没有时,返回undefined,不会报错

(四)对象的创建方法

1)对象字面量/对象直接量  var obj = {};

2)构造函数

① 系统自带的构造函数   var obj  = new Object();  obj.name = ‘xiaoli’;

② 自定义构造函数

(一)自定义构造函数的步骤

1)写一个函数  

function Person(){};

2)构造自定义对象

var person1 = new Person();

3)注意:自定义构造函数为了和普通函数区别,必须遵守以下规则

构造函数的函数命名必须符合大驼峰式命名规则(每个单词的首字母大写,如:TheFirstName

4)自定义构造函数可以通过传参实现属性值选配

5)具体代码展示

 

 function HumanBody(color){

            this.cerebrumHealth  = 100;

            this.heartHealth = 100;

            this.lungHealth = 100;

            this.liverHealth = 100;

            this.kidneyHealth = 100;

            this.stomachHealth = 100;

            this.hairColor = color;

        }

 

        var onePerson = new HumanBody(‘black‘);

        onePerson.smoke = function(){

            this.lungHealth--;

        }

        onePerson.sports = function(){

            this.heartHealth++;

            this.lungHealth++;

        }

 

 

(二)构造函数的内部原理

1) 前提:必须要加new,当对构造函数加new以后,就会执行下面三步,如果没有new就是一个普通函数

 

 

① 在构造函数里面的最前面会隐式创建  var this = {};

② 执行对象里面的代码

③ 在代码的最后 return this;

 

function Student(){

                //① var this = {};  隐式创建一个AO,把this放进去  AO = {this:{}}

                this.name = ‘xiaowang‘  //② 执行代码

                //③ return this;   //隐式返回

            }

 

 

2) 说明:如果在构造函数里面,显示的去返回一个对象,那么就会把这个对象返回,就不会返回this对象了,因为显示的要大于隐式的;但是最后显示的要返回的必须是对象,而不能是一个原始值,如果是一个原始值的话,这个就不起作用了

3) 基于构造函数的内部原理的三步骤,我们可以显示的去模拟,但是不建议这样去书写,因为一些深层次的东西是模拟不到的,如原型问题

 

  function HumanBody(color) {

            var that = {};

            that.cerebrumHealth = 100;

            that.heartHealth = 100;

            that.lungHealth = 100;

            that.liverHealth = 100;

            that.kidneyHealth = 100;

            that.stomachHealth = 100;

            that.hairColor = color;

            return that;

        }

 

        var person = HumanBody(‘red‘); //这里没有new了

        console.log(person);

 

 

 

3)其他问题

① document.write()不适合做信息展示

 

 

② 大驼峰式命名规则(每个单词的首字母大写,如TheFirstName

③ 小驼峰式命名规则(第一个单词的首字母小写,后面的单词的首字母大写,如theFirstName

④ js中的字符串最好用单引号

  1. 包装类

(一)包装类前期说明

1)原始值不能有属性和方法

2)只有对象才能有属性和方法,数组也是一种对象

3)undefinednull不可以有属性

4)数字/字符串/布尔值有两种,一种是原始值形式的数字/字符串/布尔值,另一种是原始值对象式的数字/字符串/布尔值

5)创建原始值对象式的数字/字符串/布尔值的方法分别是new Number()/new String()/new Boolean()

6)创建好的原始值对象式的数字/字符串/布尔值拥有了对象的属性和方法,但是如果对这些转换后的数据进行了原始值的计算,这些数据就会成对象返回成原始值

(二)包装类

1) 当我们对原始值直接当成对象进行操作时,它就会隐式的去创建成原始值对象式类型,而这一过程我们就叫做包装类

2) 包装类的这一过程是隐式的,隐式过程具体见下面的代码

 

 var num = 3; //这是一个原始值

        num.len = 2;  //原始值没有属性和方法,这里隐式运用包装类,见下面①②步

        //① new Number(3).len = 2;

        //② delete创建的第一步,如果下面继续有原始值调用属性和方法,依然重复一二步

        //销毁的是新创建的包装类和原始值没有关系

 

 

3) 对象字符串是有length等属性的,但是对象数字可没有

4) 相应代码进一步说明

 

包装类练习

  var str = ‘abc‘;

        str += 1;    //‘abc1‘

        var test = typeof(str); //‘string‘

        if(test.length == 6 ){ //调用包装类  因为字符串的基本包装类型有length属性,并返回6,比较后相等,条件成立

        //new String(string).length == 6     delete

            test.sign = "typeof返回的结果可能为String";

            // new String(string).sign = "typeof返回的结果可能为String"  delete

        }

       document.write(test.sign);  //undefined

        //new String(string).sign   

 

 

包装类练习变换

       var num = 123456;

        if (num.length == 6) { //调用包装类  

            //new Number(123456).length == 6  这个条件不成立,因为数字的基本包装类型根本就没有length属性     delete

            test.sign = "hello world";

            document.write(test.sign);  //不会输出

        }

        document.write(test.sign);  //报错 test is not defined

 

 

  1. 其他代码展示

 

代码一(构造函数,this)

 var a = 5;

        function test(){

             a = 0; 

             alert(a);

             alert(this.a);

             var a;

             alert(a);

        }

        // test();

        new test();

 

        //运行test()和new test()的结果分别是什么

 

        //① 运行test()  //普通函数                 

        // 全局

        GO = {

            a:5,

            test:function test(){}

        }

        // 执行test

        AO = {

            a:0

        }

        // alert(a);  0

        // alert(this.a); 5

        // alert(a);  0

 

        //② 运行new test()  //构造函数

        // function test(){

        //     //  var this = {a:};

        //      a = 0; 

        //      alert(a);  //0

        //      alert(this.a);  //undefined

        //      var a;

        //      alert(a);  //0

        //     //  return this;

        // }

 

 

代码二(构造函数,传参)

 

        function employee(name,code){

            this.name = "wangli";

            this.code = "A001";

        }

        newemp = new employee(‘zhangming‘,‘A002‘);

        document.write(‘雇员姓名‘ + ‘:‘ + newemp.name + ‘<br/>‘);  //wangli

        document.write(‘雇员代号‘ + ‘:‘ + newemp.code + ‘<br/>‘);  //A001

 

代码三(作用域,构造函数,闭包)

   function Person(name,age,sex){

            var a = 0;

            this.name = name;

            this.age = age;

            this.sex = sex;

            function sss(){

                a++;  

                document.write(a);

            }

            this.say = sss;  //闭包

        }

 

        var oPerson = new Person();

        oPerson.say();  //1

        oPerson.say();  //2

        var oPerson1 = new Person();  //重新执行Person函数,生成一个新的执行上下文

        oPerson1.say(); //1

 

代码四(预编译)

 

        var x = 1,y = z = 0;

        function add(n){

            return n = n + 1;

        }

        y = add(x);

        function add(n){

            return n = n + 3;

        }

        z = add(x);

        console.log(x,y,z);  //1 4 4

 

        //输出x,y,z;

        //预编译

        GO = {

            x:1,

            y:0,  //function add(n){ return n = n + 3 }

            z:0,  //function add(n){ return n = n + 3 }

            add:function add(n){ return n = n + 3 }

        }

       //函数名相同时,后面的会覆盖前面的

 

对象和包装类

原文:https://www.cnblogs.com/080-hll/p/12431231.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!