js对象详解
对象分类:
1.是对象:用关键词new定义的布尔,数字和字符串;日期;算术;正则表达式;数组;函数。(值变)
2.不是对象:布尔boolean;字符串string;数字number;null;undefined这五种原始数据类型的值(原始值-没有属性或方法的值,值不变)
对象是变量,但能够包含多值
js中的对象是属性(命名值)的集合;
var student={
name·:“shinee”,
occupation:“singer”,
age:“25”,
sex:“male”,
}
对象属性
在上例中
对象属性name occupation age sex
对象属性的值shinee singer 25 male
属性一般是可添加,修改,或删除,但是某些属性只可读。
属性只读的设置
对象的数据属性,所谓的数据属性就是包含一个数据值的位置。在这个位置可以读取和写入值。数据属性有 4 个描述其行为的特性。
[Configurable]:表示能否通过 delete 删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性。特性默认值为 true。
[Enumerable]:表示能否通过 for-in 循环返回属性。特性默认值为 true。
[Writable]:表示能否修改属性的值。特性默认值为 true。
[Value]:包含这个属性的数据值。读取属性值的时候,从这个位置读;写入属性值的时候,把新值保存在这个位置。这个特性的默认值为 undefined。
设置只读例子:
var student={name:“shinee”};
Object.defineProperty(student,“name”{
Writable:false,//此处将Writable设为false,意为属性只读
value:“shinee”
});
alert ( student.name);//“shinee”
student.name=“key”;//修改属性的值为“key”
alert student.name;//“shinee”(属性的值不变)
访问对象属性
1.objectName.property // student.name;
2.objectName[“property”] //student[“name”];
3.objectName[expression] //student[x] (x=“name”);
属性中的遍历循环for·····in循环
for (variable (要执行的代码) in object) {
}
添加新属性
对象已存在的情况下添加新属性(student.company=:“sm”;)
删除属性
delete objectName.property;
delete.student.name;
删除之后属性连同属性的值都会删掉;delete只设计用于删除对象属性,对变量或者函数没有影响;delete 操作符不应被用于预定义的 JavaScript 对象属性,这样做会使应用程序崩溃。
预定义对象
预定义对象是内置于JavaScript中,用于一般用途的对象类型。
原型属性
JavaScript 对象继承了它们的原型的属性。
delete 关键词不会删除被继承的属性,但是如果删除了某个原型属性,则将影响到所有从原型继承的对象。
原型
每一个JavaScript对象(null除外)都有原型,每一个对象都从原型继承属性。
所有通过对象字面量创建的对象都具有同一个原型对象,可以通过Object.prototype获得对原型对象的引用。
通过关键字new和构造函数调用创建的对象的原型就是构造函数的prototype属性的值。以通过Object.prototype获得对原型对象的引用。
对实例对象属性的访问,首先读取实例对象的属性,如果没有在实例上发现该属性,则读取原型的属性,当为实例添加一个属性时,就会屏蔽原型对象中保存的同名属性,阻止访问原型中的那个属性,但不会修改原型的那个属性。
对象方法
方法是能够在对象上执行的动作(方法是存储为对象属性的函数。)
var student={
name·:“shinee”,
occupation:“singer”,
age:“25”,
sex:“male”,
company:function(){
return 1;
}
}
this 关键词
在 JavaScript 中,被称为 this 的事物,指的是拥有该 JavaScript 代码的对象。
在方法中,this 指的是此方法的所有者对象。
单独的情况下,this 指的是全局对象。
在函数中,this 指的是全局对象。
在函数中,严格模式下,this 是 undefined。
在事件中,this 指的是接收事件的元素。
对象方法绑定
this 是 person 对象(person 对象是该函数的“拥有者”)this指代的是student对象:
var student={
name·:“shinee”,
occupation:“singer”,
age:“25”,
sex:“male”,
company:function(){
return this;
}
}
显式函数绑定
call() 和 apply() 方法是预定义的 JavaScript 方法。
它们都可以用于将另一个对象作为参数调用对象方法。
实例
var student1 = {
fullName: function() {
return this.firstName + " " + this.lastName;
}
}
var student2 = {
firstName:“li”,
lastName: “ming”,
}
student1.fullName.call(student2); // 会返回 “liming”
在此例中,是将对象student2作为参数来调用对象student1的方法,student1中的this指的是对象student2;
创建对象方法:
methodname=function(){
}
访问对象方法:
var student1 = {
firstName:“li”,
lastName: “ming”,
fullName: function() {
return this.firstName + " " + this.lastName;
}
}
document.getElementById(“ff”).innerHTML = student1.fullName();//(返回li ming)
var student1 = {
firstName:“li”,
lastName: “ming”,
fullName: function() {
return this.firstName + " " + this.lastName;
}
}
document.getElementById(“ff”).innerHTML = student1.fullName;//(返回function(){ return this.firstName + " " + this.lastName;
})
使用内建方法
比如
var a=“sdsfds”;
var d=a.ToUpperCase();
添加新的方法
向对象添加方法是在构造器函数内部完成的: