标签:一个 fine 属性 cal 字符串 数据 code object turn
对象就是拥有属性和方法的数据。
在JavaScript中,一切皆对象。如数组、函数、字符串......
对象的定义和访问
在JavaScript中,我们可以用点(.)和方括号([])来访问对象;定义对象有以下几种方法:
1、对象字面量,如:var obj = {}
2、new关键字,如:var obj = new Object()
3、Object.create(),如:var obj = Object.create(Object.prototype)
4、构造函数、工厂模式、原型模式、构造函数+原型等,如:function F(){} var obj = new F()
5、删除对象的属性用delete关键字,不能删除原型上的属性
1 // 创建一个空对象 2 var obj = {}; 3 var obj1 = new Object(); 4 // 给对象添加属性和方法 5 obj.name = "lily"; 6 obj.sayHi = function(){ 7 cons.log("Hello World"); 8 } 9 10 // 创建带有属性和方法的对象 11 var obj2 = { 12 name: "Kimmy", 13 age: 12, 14 sayHi: function(){ 15 console.log("Hello Kimmy"); 16 } 17 } 18 19 // 通过构造函数创建对象 20 function Car(name,color,price){ 21 this.name = name; 22 this.color = color; 23 this.price = price; 24 } 25 var car = new Car("BMW","银色","55"); 26 27 // 访问对象的属性和方法 28 car.name; // 返回BMW 29 car["color"]; // 返回银色 30 31 // 工厂模式方法 32 function createPerson(name,age,job){ 33 var person = new Object(); 34 person.name = name; 35 person.age = age; 36 person.job = job; 37 person.sayName = function(){ 38 alert(person.name); 39 } 40 return person; 41 } 42 43 var person1 = createPerson("zh","62","Doctor"); 44 person1.sayName();
对象实例的属性和方法
1、constructor属性 - 存储当前对象的构造函数
2、prototype属性 - 原型属性,在创建对象时就设置好了,是用来继承属性的
3、hasOwnProperty(属性名)方法 - 检测给定的属性名是否是对象自身的属性,对于继承的属性返回false
4、isPrototypeOf(object)方法 - 判断一个对象是否在object对象的原型链上
5、propertyIsEnumberable(属性名)方法 - 是hasOwnProperty的增强版,检测对象有自身的且可枚举的属性时返回true
6、toString()、toLocalString()、valueOf()方法
7、for...in...遍历对象可枚举的属性
1 // constructor 2 var obj = { 3 name: "Lee", 4 age:12, 5 say: function(){ 6 console.log("hello"); 7 } 8 } 9 obj.constructor; // 返回function Object(){} 10 11 // hasOwnProperty 12 obj.hasOwnProperty("age"); // 返回true 13 obj.hasOwnProperty("toString"); // 返回false,toString是继承的属性 14 15 // propertyIsEnumerable 16 obj.propertyIsEnumerable("say"); // 返回true 17 obj.propertyIsEnumerable("toString"); // 返回false,toString不可枚举 18 19 // for...in遍历 20 for(var o in obj){ 21 console.log(o); // 返回name、age、say 22 } 23 24 // isPrototypeOf 25 function MyObject() {} 26 var obj = new MyObject(); 27 console.log(Object.prototype.isPrototypeOf(obj)); // 返回true 由于MyObject是继承自Object对象,而继承是通过prototype实现的,所以Object的prototype必定在MyObject对象实例的原型链上
属性的特性
在JavaScript中,属性分为数据属性和存取器属性,数据属实只是一个值,而存取器属性是由getter和setter定义。
数据属性具有可写(writable)、可配置(configurable)、可枚举(enumberable)和value特性。我们可以通过Object.defineProperty()和Object.defineProperties()对这四个特性进行设置。
writable - 表示属性值是否可修改,默认为true
configurable - 表示是否可通过delete来删除属性,默认为true
enumberable - 表示是否可通过for...in来枚举属性,默认为true
value - 表示属性的值,默认为undefined
1 // obj对象中的name、age、sex属性现在是可删除的 2 var obj = { 3 name: "Jimmy", 4 age: 12, 5 sex: "M" 6 } 7 obj.name; // 返回Jimmy 8 delete obj.name; // 返回true 9 obj.name; // 返回undefined 10 11 // 我们可以通过Object.defineProperty()来设置起可写、可配置、可枚举和value,只能对一个属性进行操作,若要对多个属性进行操作,可通过Object.defineProperties()来设置 12 /* 13 * Object.defineProperty(obj,propertyName,option) 14 * obj - 需要设置的那个对象 15 * propertyName - obj对象中要设置的属性名 16 * option - 一个对象,配置其4个特性 17 */ 18 var obj1 = { 19 name:"Jimmy", 20 age:25, 21 sex:"M" 22 } 23 Object.defineProperty(obj1,"name",{ 24 writable:false, // false不可写;true可写 25 configurable:false, // false不可配置;true可配置 26 enumberable:false, // false不可枚举;true可枚举 27 value:"Kimmy" // 对name设值 28 }); 29 obj.name; // 返回Kimmy 30 delete obj.name; // 返回false 31 obj.name; // 返回Kimmy 32 33 /* 34 * Object.defineProperties(obj,option) 35 * obj - 需要设置的那个对象 36 * option - 一个映射表,对obj中的需要设置的属性分别配置其4个特性 37 */ 38 var obj2 = { 39 name:"Lily" 40 age:25 41 } 42 Object.defineProperties(obj2,{ 43 name:{ 44 writable:true, // false不可写;true可写 45 configurable:false, // false不可配置;true可配置 46 enumberable:false // false不可枚举;true可枚举 47 }, 48 age:{ 49 writable:true, // false不可写;true可写 50 configurable:false, // false不可配置;true可配置 51 enumberable:true // false不可枚举;true可枚举 52 } 53 });
存取器属性不具有可写性(writable)和value值,但是它用有一堆getter和setter函数。
get - 读取属性时调用,默认为undefined
set - 设置属性时调用,默认为undefined
1 // 定义存取器 2 var obj = { 3 age:15, // 数据属性 4 5 // 存取器属性 6 get type(){ 7 return this.age > 18 ? "成年" : "未成年"; 8 }, 9 set type(age){ 10 this.age = age; 11 } 12 }; 13 obj.type; // 返回 未成年 14 obj.type = 20; 15 obj.type; // 返回 成年 16 obj.age; // 返回20
注意:get、set和函数体之间没有用冒号给开,而是用空格
本文仅供自己在平时工作学习时作笔记使用!如有错误请多多指出!!!
标签:一个 fine 属性 cal 字符串 数据 code object turn
原文地址:http://www.cnblogs.com/iyunpeng/p/7606841.html