对象Object

2018-08-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。

上一篇下一篇

猜你喜欢

热点阅读