美文网首页
对象Object

对象Object

作者: _无味 | 来源:发表于2018-08-11 20:11 被阅读10次

    JavaScript 中的所有事物都是对象,如:字符串、数值、数组、函数等,每个对象带有属性和方法。
    对象的属性:反映该对象某些特定的性质的,如:字符串的长度、图像的长宽等
    对象的方法:能够在对象上执行的动作。例如,表单的“提交”(Submit),时间的“获取”(getYear)等;
    JavaScript 提供多个内建对象,比如 String、Date、Array 等等,使用对象前先定义,如下使用数组对象:

    var objectName =new Array();//使用new关键字定义对象
    //或者
    var objectName =[];
    

    对象是一组“键值对”的集合。之间用逗号分隔.

    var obj = {
     str1: 'Hello',
      str2: 'World'
    }
    console.log(obj.str1)
    //str1: 'Hello',    键值对             
    //str1              键名 
    //"Hello"           键值
    
    //键名
    //所有对象的键名都是字符串。所以加不加引号都代表它是字符串(只能是字符串)
    var obj={
        100:"键值1"
    }
    //调用:
    //console.log(obj.100)        //不成立
    console.log(obj[100])
    //js中所有的点都可以替换成中括号
    
    //键值
    //键值可以是任何数据类型。也可以是函数
    var obj={
        fn:function(x){
        console.log(x)
        }
    }
    //调用:
    obj.fn(3)        //3
    
    //对象的引用   
    //对象名.键值         该方法可读可写
    var o1 = {};
    var o2 = o1;
    o1.a = 1;
    o2.a                // 1
    o2.b = 2;
    o1.b                //2  
    

    object属性的操作

    //读取属性
    var obj = {
    str: 'Hello World'
    }
    obj.str
    obj['str'] 
    //使用方括号必须将键名用引号引起来,否则会当做是一个变量
    
    //删除属性
    var obj={ a:1,b:2,c:3}
    delete obj.c                
    console.log(obj)            //{a:1,b:2}
    //这个关键字属性只能作用在对象上
    
    //查看所有属性(查看所有键名)
    var obj = {};
    obj.a = 'Hello';
    obj['b'] = 'World';
    console.log(Object.keys(obj))               
    //['a','b'] 返回一个数组,查看所有键名
    //注意O是大写
    
    //检测数据是否在对象中
    var obj={a:1,b:2,c:3}
    //关键字 in
    console.log("a" in obj)         //true
    console.log("d" in obj)         //false
    
    //对象的遍历
    var obj={a:1,b:2,c:3,d:"abc"}
    var arr=Object.keys(obj)
    console.log(arr)                        // ["a", "b", "c", "d"]
    for (var i = 0; i < arr.length; i++) {
        console.log(obj[arr[i]])     //1 2 3 abc
    }   
    //先获取键名,然后通过键名去调取键值
    
    //for.. in循环
    var obj={a:1,b:2,c:3}
    for(var i in obj){
        console.log(i)              //遍历所有键名
        console.log(obj[i])         //遍历所有键值
    }
    
    //with语句(with方法,绑定的对象并不明确。只做了解,很少用到。)
    //读取或设置对象中的属性
    var obj = {p1: 1,  p2: 2,};
    with (obj) {
        p1 = 4;
        p2 = 5; 
    }   
    // 等同于
    obj.p1 = 4;
    obj.p2 = 5;
    

    对象中的this
    this 永远指向最后调用它的那个对象。默认指向window。
    一、方法调用模式
    当函数被保存为一个对象的属性时,它就可称为这个对象的方法。
    当一个方法被调用时,this被绑定到这个对象上。
    如果调用表达式包含一个提取属性的动作(. 或 [])
    那么它被称为方法调用。例如:

    var name = "window";
    var obj = {
        name: "kxy",
       sayName: function() {
           console.log(this.name);
        }
    }
    obj.sayName();  //kxy 
    //sayName函数作为对象obj的方法调用,所以函数体中的this就代表obj对象。
    

    二、函数调用模式
    当一个函数并非一个对象的属性时,那么它就是被当做函数来调用的。
    在此种模式下,this被绑定为全局对象,在浏览器环境下就是window对象。例如:

    var name = "window";
    function sayName() {
        console.log(this.name);
    }
    sayName();
    sayName以函数调用模式调用,所以函数体中的this代表window对象。
    

    三、构造函数模式
    如果在一个函数前面加上new关键字来调用,那么就会创建一个连接
    到该函数的prototype成员的新对象,同时,this会被绑定到这个新对象上。
    这种情况下,这个函数就可以成为此对象的构造函数。例如:

    function Obj() {
    this.name = "kxy";
    }
    var person = new Obj();
    console.log(person.name); //kxy
    //Obj作为构造函数被调用,函数体内的this被绑定为新创建的对象person

            
    四、apply调用模式
    在JS中,函数也是对象,所有函数对象都有两个方法:apply和call,
    这两个方法可以让我们构建一个参数数组传递给调用函数,
    也允许我们改变this的值。例如:
    

    var name = "window";
    var person = {
    name: "kxy"
    };
    function sayName() {
    console.log(this.name);
    }
    sayName(); //window
    sayName.apply(person); //kxy
    sayName.apply(); //window
    //当以函数调用模式调用sayName时,this代表window;
    //当用apply模式调用sayName,并给它传入的第一个参数为person时
    //,this被绑定到person对象上。如果不给apply传入任何参数,则this代表window。

    相关文章

      网友评论

          本文标题:对象Object

          本文链接:https://www.haomeiwen.com/subject/urzdbftx.html