精华内容
下载资源
问答
  • 属性可以是基本值、对象和函数)。 属性类型 对象属性类型有两种,一种是数据属性,是数据值的保存位置;另一种是访问器属性,包含gettersetter函数。 数据属性 数据属性包含一个数据值的位置,在这个位置可以...

    理解对象

    ES5中的对象是指无序的属性的集合。(属性可以是基本值、对象和函数)。

    对象的属性类型有两种,一种是数据属性,是数据值的保存位置;另一种是访问器属性,包含getter和setter函数。

    1.1 数据属性

    数据属性包含一个数据值的位置,在这个位置可以读取和写入值。数据属性有四个描述其特征的特性。(这些特性是为javascript内部引擎服务的,不能直接访问,所以将它们放在方括号中。)

    1. [[Configurable]]:表示能否通过 delete 删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性。默认值为true。
    2. [[Enumerable]]: 能否通过for-in循环返回属性。默认值为true。
    3. [[Writable]]:能否修改属性的值,默认值为true。
    4. [[Value]]: 属性的数据值,默认为undefined。

    !!!此处说的默认值是指直接定义时的默认值,与使用defineProperty()定义的属性默认值不同

    数据属性可以直接使用对象字面量或new Object对象来定义,而这些特性值不能直接访问,要修改默认的特性,要使用定义在Object对象中的defineProperty()函数

    !!!在调用 Object.defineProperty()方法时,如果不指定configurable、enumerable 和writable 特性的默认值都是 false。

    示例如下:

    // 使用对象字面量创建一个对象
    var person = {};
    
    //修改该对象属性的默认特性
    /*
    	第一个参数为属性所在的对象。
    	第二个参数为要定义的属性名。
    	第三个参数是其特性描述符的对象。(属性为configurable, enumerable, writable, value)
    */
    Object.defineProperty(person, "name", { 
     writable: false, 
     value: "Nicholas" 
    });
    
    //这样就可以访问定义好的数据属性了
    alert(person.name); //"Nicholas" 
    
    //在定义属性时将writable设定为false,所有对name属性的值更改操作无效。(严格模式下会报错)
    person.name = "Greg"; 
    alert(person.name); //"Nicholas"
    

    另外将把 configurable 设置为 false,表示不能从对象中删除属性。如果对这个属性调用 delete,则在非严格模式下什么也不会发生,而在严格模式下会导致错误。一旦把属性定义为不可配置的,就不能再把它变回可配置了。 此时,Object.defineProperty()方法修改除 writable 之外的特性,都会导致错误。

    1.2 访问器属性

    访问器属性不包含数据值,包含一对 getter 和 setter 函数(不必需)。
    在读取访问器属性时,会调用 getter 函数,这个函数负责返回有效的值;
    在写入访问器属性时,会调用setter 函数并传入新值,这个函数负责决定如何处理数据。
    访问器属性也包含了四个特性。

    1. [[Configurable]]: 表示能否通过 delete 删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为数据属性。默认值为true。
    2. [[Enumerable]]: 能否通过for-in来访问属性。默认值为true。
    3. [[Get]]: 读取属性时调用的函数。默认值为undefined。
    4. [[Set]]:写入属性时调用的函数,默认值为undefined。

    访问器属性不能直接定义,必须要使用Obiect.defineProperty()来定义。定义的过程于数据属性类似。

    var book = { 
     _year: 2004,  //'_'是一种常用于表示只能通过对象方法访问的属性的记号
     edition: 1 
    }; 
    /*
    	第一个参数为属性所在的对象。
    	第二个参数为要定义的访问器属性名。
    	第三个参数是其特性描述符的对象。(属性为configurable, enumerable, get, set)
    */
    Object.defineProperty(book, "year", { 
    // 访问一个私有变量
     get: function(){ 
     return this._year; 
     }, 
     // set常用于改变一个变量导致其他变量改变的情形
     set: function(newValue){ 
     if (newValue > 2004) { 
     this._year = newValue; 
     this.edition += newValue - 2004; 
     } 
     } 
    }); 
    book.year = 2005; 
    alert(book.edition); //2
    

    不一定非要同时指定 getter 和 setter。
    只指定 getter 意味着属性是不能写,在非严格模式下尝试写入属性会被忽略。
    类似地,只指定 setter 函数的属性也不能读,在非严格模式下会返回 undefined。
    在严格模式下,尝试写入只指定了 getter 函数的属性和读取只指定了 setter函数的属性会抛出错误。

    定义多个属性

    上面介绍的Object.defineProperty()方法只能定义单个属性,Object.defineProperties()方法可以通过描述符一次定义多个属性。
    !!!在调用 Object.defineProperties()方法时,如果不指定configurable、enumerable 和writable 特性的默认值都是 false。
    示例如下:

    var book = {}; 
    Object.defineProperties(book, { 
    	//定义数据属性
    	 _year: { 
    	 	value: 2004 
    	 }, 
    	 edition: { 
    	 value: 1 
    	 }, 
    	 // 定义访问器属性
    	 year: { 
    		 get: function(){
    		 	return this._year; 
    		 }, 
    		 set: function(newValue){ 
    			 if (newValue > 2004) { 
    			 this._year = newValue; 
    			 this.edition += newValue - 2004; 
    		 	} 
    	 	} 
    	} 
    });
    

    读取属性的特性

    JS中的Object。getOwnPropertyDescriptor()方法可以取得给定的对象属性描述符。对上一节中定义的book对象,有以下示例:

    // 该方法接受两个参数  第一个参数是对象   第二个参数是对应的属性
    var descriptor = Object.getOwnPropertyDescriptor(book, "_year"); 
    alert(descriptor.value); //2004 
    alert(descriptor.configurable); //false
    alert(typeof descriptor.get); //"undefined" 
    
    var descriptor = Object.getOwnPropertyDescriptor(book, "year"); 
    alert(descriptor.value); //undefined 
    alert(descriptor.enumerable); //false 
    alert(typeof descriptor.get); //"function"
    

    在 JavaScript 中,可以针对任何对象——包括 DOM 和 BOM 对象,使用 Object.getOwnPropertyDescriptor()方法。

    展开全文
  • js定义对象属性名是否加引号问题

    千次阅读 2018-09-16 16:01:22
    1.在JavaScript中,加引号与不加引号都是一样用,都是有效的。 var person1 = { name:'pca', age:12 }; alert(person1.name); //pca alert(person1['name']);//pca var person2 = { 'name':'pca', age:12 }; ...

    1.在JavaScript中,加引号与不加引号都是一样用,都是有效的。

    var person1 = {
        name:'pca',
        age:12
    };
    alert(person1.name); //pca
    alert(person1['name']);//pca
    
    var person2 = {
        'name':'pca',
        age:12
    };
    alert(person2.name); //pca
    alert(person2['name']);//pca
    

    2.但是当使用非合法命名规则的时候,就必须要使用引号,

       还需要注意的是,如果加上引号,使用  “.属性名”: 方式读取属性时仍然会出错,需要使用  “[‘属性名']”: 方式读取属性

    var person = {
        'first-name':'pca',
        age:12
    }
    
    console.log(person.first-name);//NaN
    console.log(person['first-name']);//pca

     

    展开全文
  • js代码-对象属性定义

    2021-07-16 12:47:07
    js代码-对象属性定义
  • javascript 定义对象、方法和属性的使用方法(prototype)

    千次阅读 热门讨论 2017-03-08 16:19:29
    prototype 属性使您有能力向对象添加属性和方法。 语法 object.prototype = { 函数名 : function(){} } object.prototype.name=value javaScript的中类和对象 定义类 例1: //第一种定义方式 var ...

    prototype

    定义和用法
    prototype 属性使您有能力向对象添加属性和方法。

    语法

    object.prototype = {
        函数名 : function(){}
    }
    object.prototype.name=value

    javaScript的中类和对象

    1. 定义类

      1//第一种定义方式
      var people = function(name){
          this.name = name;
          this.say = function(msg){
              alert(this.name + " say : " +msg);
          }
      }
      //第二种定义方式
      function people(name) {
          this.name = name;
          this.init = function(msg){
              alert(this.name + " say : " +msg);;
          }
      }
      //调用
      var people = new people("I");
      people.init("hello");//输出:I say hello
      
      //定义静态方法,接例1
      people.says = function(msg){
          alert(this.name + " say : " +msg);
      }
      people.aa = "aa";
      //调用
      people.inits("hellos");//I say Hellos   
      alert(people.aa);//aa
      //这种定义方式无法使用map的调用方式,不懂
    2. 定义对象,调用时使用对象.方法或者和java调用map的方式一样对象['方法名'](args)

      2//定义对象
      var people = {
          run : function(){
              alert("I can run");
          }   
      };
      //调用
      people.run();//输出 I can run
      people['run']();//同上
    3. 以上两种方式不能同时使用

    Javascript的方法可以分为三类

    1. 类方法,如例1
    2. 对象方法,如例2
    3. 原型方法,prototype

      3//定义类
      var people = function(name){
          this.name = name;
      }
      //原型方法
      people.prototype = {
          introduceChinese : function(){
              alert(this.people +"的名字是"+this.name);
          }
          people;
      };
      
      //测试
      
      var p1=new people("Windking");
      p1.people = '谁';
      p1.IntroduceChinese(); 

    总结:

    1. javaScript创建对象就是定义函数
    2. javaScript对象定义方法和属性有三种方式

      • 在函数内部定义方法和属性,类似java的定义,如例1
      • 使用函数名.prototype定义方法和属性,例3
      • 使用对象定义方法和属性
    3. 使用prototype定义属性时,要放在定义方法的后面,不然属性会是undefined

    4. 使用javascript定义属性,不像java那么严谨,在实例经对象后,也可以定义属性
    5. 使用prototype和函数内部定义方法和属性,其作用是一样的,都需要实例化函数后才可使用
    6. 直接使用函数名定义方法和属性,类似java的静态该当和变量,如:
       function scriptBean(){}
       //定义方法
       scriptBean.sayHello = function(msg){
        console.log(this.name + " say : " +msg);
       }
       //定义属性
       scriptBean.name = "scriptBean";
       //调用
       scriptBean.sayHello("hello");
    展开全文
  • 主要介绍了JavaScript通过prototype给对象定义属性用法,实例分析了prototype的功能及使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
  • js定义动态对象属性 var str={}; str.a=“aaa”; //这种方法只能定义str里的一个属性a,如果有循环,只会保存最后一个值 str[a]=“aaa”; //这种方法可以定义多个不重复的属性,如果有循环,会保存多个值 例如: ...

    js定义动态对象属性

    var str={};

    str.a=“aaa”;  //这种方法只能定义str里的一个属性a,如果有循环,只会保存最后一个值

    str[a]=“aaa”; //这种方法可以定义多个不重复的属性,如果有循环,会保存多个值

    例如:

    var str={};
    for(var i=0;i<5;i++){
      var key="key"+i;
      str.key='aaa'+i;
    }
    console.log(str)  // {key: "aaa4"}
    
     
    
    var str={};
    
    for(var i=0;i<5;i++){
      var key="key"+i;
      str[key]='aaa'+i;
    }
    console.log(str);  //{key0: "aaa0", key1: "aaa1", key2: "aaa2", key3: "aaa3", key4: "aaa4"}
    
    展开全文
  • $.isEmptyObject() 判断对象是否 null 或 undefined //Object.keys().length != 0 if (!$.isEmptyObject(result.createDate)&&Object.keys(result.createDate).length != 0) { $('#createDate...
  • 前提说明:本篇为自学随记,可供JS自学者查看。 <!doctype html> <html> <head> <title>Document</title>...script type="text/javascript">... //定义属性 //1....
  • 一、什么是JavaScript对象的prototype属性 JavaScript对象的prototype...可以向其原型中动态添加功能(属性和方法),但该对象不能被赋予不同的原型。然而,用户定义对象可以被赋给新的原型。 在JavaScript中,pr
  • JavaScript 可以在定义类时定义属性和方法,也可以在创建对象以后动态添加属性和方法。动态添加属性和方法在其他面向对象的编程语言(C++、JavaScript等)中是难以实现的,这是JavaScript灵活性的体现。根据Person类...
  • JavaScript定义对象 var person={firstname:"王",lastname:"鹏鹏",age:22}; document.write(person.lastname+""); document.write(person['lastname']+""); document.write(person['age']+""); ...
  • js对象定义属性的方法

    千次阅读 2019-06-24 19:09:56
    方式一:在定义对象时,直接添加属性和方法 function Person(name,age) { this.name = name; this.age = age; this.say = function() { alert(name + ':::' + age); } } var person = new Person('张三', 24); ...
  • 本文实例讲述了JavaScript定义和对象的方法。分享给大家供大家参考。具体方法如下: 在JS中,类和对象有多种不同的写法,因为本人对JS也不怎么熟,所以就本人的理解来写,如果哪位朋友发现有不对,请告之,共同...
  • //调用Object.defineProperties(对象名,要添加的属性)方法,为对象一次定义多个属性(1.数据属性)(2.访问器属性) Object.defineProperties(book,{ //添加的两个数据属性(_year,edition) _year:{//(_year)前面的
  • JAVASCRIPT对象属性

    2021-01-19 20:00:23
    SRC 定义一个URL用以指定以.JS结尾的文件 windows对象 每个HTML文档的顶层对象. 属性 frames[] 子桢数组.每个子桢数组按源文档中定义的顺序存放. feames.length 子桢个数. self 当前窗口. parent 父窗口(当前...
  • ES 6中定义对象属性

    2020-01-08 09:57:39
    ES6 允许在对象中使用表达式定义属性名,这时表达式放置在方括号内
  • JS面向对象之对象属性的属性

    千次阅读 2018-06-27 10:24:02
    ECMAScript的定义中,对象的属性有两种,一种是数据属性,另一种是访问器属性 ...下面就来聊聊对象属性的两种类别。   1.数据属性 这种属性包含有一个存放数据值的属性[[Value]],数据属性共有4个描述其行为的属...
  • 主要介绍了JavaScript面向对象程序设计中对象定义和继承,结合实例形式详细分析了javascript面向对象程序设计中对象定义、继承、属性、方法、深拷贝等相关概念与操作技巧,需要的朋友可以参考下
  • js 定义属性 以及 getter setter

    千次阅读 2017-05-29 12:45:54
    今天说一下js 的属性设置,ES5中定义了两种属性,数据属性和访问器属性(getter 和 setter)下面我总结了一些数据属性 和 访问器属性的一些知识点。一、数据属性数据属性有四个描述其行为的特征:

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 440,062
精华内容 176,024
关键字:

js定义对象和属性