0
点赞
收藏
分享

微信扫一扫

关于对象的介绍

舍予兄 2021-09-23 阅读 45

对象:对象就是命名的数据的集合

从语法的角度来说,存放内容的属性就像变量一样,而执行动作的方法由函数来完成。因此,对象也可以看成是变量和函数的有机集合,只不过它是以“键:值”对的形式呈现

静态内容,也叫属性(其实就是变量)

形态:名 -> 值 的方式来定义,也叫 键(key)值(value)对

1、如何去定义或者创建对象?

    1)字面量对象:

        { }中以 “键 / 值” 对 (键也叫索引)的形式申明属性和方法,以花括号形式定义的对象是字面量对象

对象=  {

        属性1,

        属性2,

        方法1,

        方法2

}

    在编程中,抽象数据和数据处理的方法,先从生活的角度出发,去抽象对象,所有的实体都可以看成对象,抽象它的静态特征,作为属性,动态特征,就是行为方法。

抽象一个人的对象:

静态特征:姓名、性别、年龄、身高、体重

动态行为:唱歌、跳舞、运动、读书、编程

var foo = {

        name : "张三"

            sex : "男"

           age  : "18"

        height : "180"

    sing : function( ) {

        return "我在唱歌"

    }

    reading : function( ) {

        return "我在读书"

    }

}

//  对象中的成员使用"对象名 . 成员" 来访问

console.log(foo.name + "的年龄是:" + foo.age);

// 打印输出为:张三的年龄是18

console.log(foo.sing());

// 打印输出为:我在唱歌

2)this关键字

    对象的成员可以在所有的方法中共享,方法体内访问的对象成员,可以使用this替代当前对象:

    var a = {

        name: "小白",

        getName: function () {

            //方法体内使用this替代当前的对象

            // 打印输出一下this是否等于a?

            // console.log(this=== a); 结果为true

            return this.name;

        },

    };

    // 输出console.log(a.getName());结果为小白

3)使用构造器

使用对象的构造函数Object 显示的创建一个对象,构造函数是专门生产对象的函数,一个构造器:

使用构造函数创建对象:构造对象的函数工具 可以看成是对象的模板

普通对象的构造是Object在面向对象语言中 称为"类"(class)

    // 使用构造器初始化一个空对象,专业术语叫构造函数,new 表示新生对象

    var o = new Object;

    // 通过赋值的方式,动态添加成员属性和方法

    o.name = "灰太狼";

    o.sex = "雄性";

    o.age = 18;

    o.sayHello = function () {

        return this.name + "说到 : 我还会回来的";

        // 返回出去的结果是:灰太狼说到:我还会回来的

    };

    console.dir(o);  

    console.log(o.name + "的年龄是:" + o.age);

    console.log(o.sayHello());

4) 简洁声明的方式:

在es6中,字面量对象的写法更为简洁。当属性值包含在同名的变量是,例如:foo属性定义在变量foo中,那么{foo :foo}可以简写成{foo},称为 “简洁属性”。事实上它省略了左侧的foo

        var   foo ="hello",

                bar = "world";

        var o = {

            foo: foo, //将变量foo的值给foo属性

            bar: bar  //将变量bar的值给bar属性

        } //当属性和变量同名省略左侧接收值的属性

    var o = {

        foo,

        bar

    }

    console.log(o);

不仅是属性,方法也有更为简洁的写法且没有任何的前提,所有的方法都可以省略掉:function声明。

    // es6+中方法存在三种写法

    var o = {

        foo: function () { //表达式},

        bar: () => {  //箭头函数},

        baz () {  //简洁方法},

    }

    console.log(o);

5) 动态属性

        var a = "baz";

        var o = {

            foo : "foo",

            bar : "bar",

            // baz : "baz",

        }

        // 如果属性名是一个变量的值 早期需要动态的设置该属性

        o.a = "baz"; // .后面不解析变量 它认为属性名就是a 不是变量a的值

        console.log(o);

        // 如果要解析 需要使用[ ]

        o[a] = "baz";

        console.log(o);

        // 现在可以在字面量对象中 直接设置动态属性

        var o = {

            foo : "foo",

            bar : "bar",

            // 使用[ ]声明的属性 为一个变量的值

            [a] : "hello world"

        }

        console.log(o);

1.2 对象的特征

    1)对象转化

对象是复合类型的数据,它不仅有值更有结构在里面,因此不能直接参与运算和输出。当把一个对象用于字符串环境中时,JS会隐式的调用对象的toString( )方法将它转化成一个字符串后再进行操作;

如果没有自定义的toString( )的方法则对象会从它的隐式原型链继承toString()方法,而隐式原型链都至少包含一个Object.prototype.toString( )方法。该方法返回一个[object Object]的字符串值。前者object为它的类型说明,后者Object则是构造函数名称。

当把一个对象用于数学环境中时,JS会隐式的调用它的valueOf()方法,查询到相应类型的数值后再进行运算,事实上valueOf()的转化过程要复杂很多,这里只做简单的介绍!

2)属性检测

in运算    1.in运算用来检测对象中是否存在某个属性时,返回一个布尔值的结果,运算表达式为"属性" in 对象。表达式左边为属性名称字符串或者能够转化成字符串值得变量,右边为一个对象类型的值。    

2. 使用hasOwnProperty的检测方法,而不能检测继承的属性

举报

相关推荐

0 条评论