码迷,mamicode.com
首页 > 编程语言 > 详细

JavaScript之对象

时间:2017-10-13 13:56:46      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:一个   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和函数体之间没有用冒号给开,而是用空格

 

 

 

本文仅供自己在平时工作学习时作笔记使用!如有错误请多多指出!!!

JavaScript之对象

标签:一个   fine   属性   cal   字符串   数据   code   object   turn   

原文地址:http://www.cnblogs.com/iyunpeng/p/7606841.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!