关于对象的一些问题

对象的属性有属性描述符的对象,即使没有直接给出。

var obj = {
       name: ‘objcet‘
};

Objcet.getOwnpropertyDescriptor(obj, "name");   // 为:{value: "objcet", configurable: true, writable: true, enumerable: true}

//直接给出Object.defineProperty(obj, "tool", {     value: "tool"});
Objcet.getOwnpropertyDescriptor(obj, "tool");   // 为:{value: "tool", configurable: false, writable: false, enumerable: false}

这里默认含有一个对象描述符对象。且各项默认为true。我们可以对其进行多项操作。若我直接给出呢?这是若不在对象中明确给出,那么就会默认为false。

问题是这四个值重要吗?

value可以直接修改值,writable决定是否可以写入,enumerable决定for in 语句、Objcet.keys()、o.propertyIsEnumerable(),configurable决定是否可以删除属性值以及是否可以配置。

问题2:浅复制下不会对原有的描述符的属性进行复制,也就是说其中的值默认为true。

访问器属性:它们与value、writable是冲突的,只能给出一种形式。

var obj = {
       get value () {
        return this._value;
       },
       set value (v) {
        this._value = v;
       }
};//这是的value是不可枚举、不可配置的。_value是可以枚举配置的。

枚举

for...in 语句会以[[prototype]]链的方式枚举但枚举的是属性名。

var arr = [1, 2, 3];
for (var i in arr) {
     console.log(i);
}//值为:"0"、"1"、"2"

另:Object.keys()、Objcet.getOwnPropertyNames()不会查找原型链。

遍历:

数组内置@@iterator从而可以遍历得到值,对于一个对象可以认为建立@@iteraror来与for of 语句搭配使用。下面是一个例子。

var random = {
        [Symbol.iterator]: function () {
                return {
                      next: function () {
                             return {
                                    value: Math.random()
                             };
                      }
                };
        }
};
时间: 2024-10-12 17:15:37

关于对象的一些问题的相关文章

通过jQuery Ajax使用FormData对象上传文件

转自:http://www.cnblogs.com/labnizejuly/p/5588444.html FormData对象,是可以使用一系列的键值对来模拟一个完整的表单,然后使用XMLHttpRequest发送这个"表单". <form id="uploadForm" enctype="multipart/form-data"> <input id="file" type="file"

对象序列化和反序列--Hibernate的查询和新增极其相似

Hibernate几个关键字持久化,ORM(关系对象映射)(数据库中关系称作是一张表) 应用在项目中,刘一从写的查询代码,每次都挂掉,想要弄出测试数据,自己想着把查询出来的复杂数据弄到文件里自己要是去造那些复杂数据很麻烦public class Object1 { public static void main(String args[]){ HashMap<String, Object> obj=new HashMap<String,Object>(); obj.put(&quo

C#中XML与对象之间的序列化、反序列化

using System; using System.IO; using System.Text; using System.Xml; using System.Xml.Serialization; namespace Xml.Utility { public static class XmlUtil { /// <summary> /// 将一个对象序列化为XML字符串 /// </summary> /// <param name="o">要序列化

菜鸟学python之对象类型及运算

Python 中的变量不需要声明.每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建. 在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型. 等号(=)用来给变量赋值. 1 变量赋值 1.1 单个变量赋值 >>> name="python" >>> print(name) python 1.2 多个变量赋值 >>> name=names="python&

java 类对象使用

在学习反射机制时,总结一下获得类对象方式: 第一种方式:通过类本身来获得对象 Class<?> classname = this.getClass(); 或者this.class 第二种方式:通过子类的实例获取父类对象 ClassName cn = new ClassName(); UserClass = cn.getClass(); Class<?> SubUserClass = UserClass.getSuperclass(); 第三种方式:通过类名加.class获取对象 C

dbutils封装对象,单列,一行一列(用)

基本用法:查找并封装对象与对象集合 public User findUserByNamePassword(String name,String password){ QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource()); String sql = "select * from user where name='"+name+"' and password = '"+password

Class类 获取Class对象

阅读API的Class类得知,Class 没有公共构造方法.Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的 获取Class对象的三种方式(实例采用Person类) 方式1:通过Object类的getObject()方法 Person p = new Person(); Class c = p.getClass(); 方式2: 通过 类名.class 获取到字节码文件对象(任意数据类型都具备一个class静态属性,看上去要比第一种方

Linux共享对象之编译参数fPIC(转)

最近在看Linux编程的基础知识,打算对一些比较有趣的知识做一些汇总备忘,本文围绕fPIC展开,学习参考见文末. 在Linux系统中,动态链接文件称为动态共享对象(DSO,Dynamic Shared Objects),简称共享对象,一般是以.so为扩展名的文件.在Windows系统中,则称为动态链接库(Dynamic Linking Library),很多以.dll为扩展名.这里只备忘Linux的共享对象. 在实现一共享对象时,最一般的编译链接命令行为: g++ -fPIC -shared t

JavaScript 对象

JavaScript 中的所有事物都是对象:字符串.数值.数组.函数... 此外,JavaScript 允许自定义对象. JavaScript 对象 JavaScript 提供多个内建对象,比如 String.Date.Array 等等. 对象只是带有属性和方法的特殊数据类型. 建 JavaScript 对象 通过 JavaScript,您能够定义并创建自己的对象. 创建新对象有两种不同的方法: 定义并创建对象的实例 使用函数来定义对象,然后创建新的对象实例

hibernate载入持久化对象的两种方式——get、load

一.get与load对照 在hibernate中get和load方法是依据id取得持久化对象的两种方法.但在实际使用的过程中总会把两者混淆,不知道什么情况下使用get好,什么时候使用load方法效率更高.下边具体说一下get和load的不同,有些时候为了对照也会把find加进来. 1.从返回结果上对照: load方式检索不到的话会抛出org.hibernate.ObjectNotFoundException异常 get方法检索不到的话会返回null 2.从检索运行机制上对照: get方法和fin