object类能创建对象吗,js定义object对象
如何使用Object()函数创建对象?下面这篇文章介绍用object()构造函数创建对象的方法(用另外三种创建对象的方法),希望对你有帮助!
new Object()创建对象
JavaScript原生提供Object对象(注意首字母O大写),其他所有对象都从这个对象继承。对象本身也是一个构造函数,可以直接生成新的对象。
Object()函数可以将给定的值包装为一个新对象。
语法:
新对象()
新对象(值)参数值是任何类型的可选参数。
如果value值为null或未定义或未传递,将创建并返回一个空对象;
如果value值是基本类型,将构造其包装类的对象,并返回与给定值对应的类型的对象。
如果该值是引用类型,则仍会返回该值。
如果给定的值是一个现有的对象,这个现有的值(相同的地址)将被返回。
var obj=new Object();//创建了一个空对象
张三丰;
obj.name=18//字面上创建对象是不一样的。这里需要使用=assignment来添加属性和方法。
nan ;//属性和方法后跟;目标
obj.sayHi=function() {
console . log( hi );
}
console . log(obj . uname);
console . log(obj[ age ]);
说明:通过编写new Object()生成一个新对象,相当于字面上的写法o={}。
var O1={ a:1 };
var o2=新对象(O1);
o1===o2 //真
编号的新对象(123)实例
//真与其他构造函数一样,如果要在Object对象上面部署一个方法,有两种做法。
(1)部署在对象本身的对象
例如,在Object对象上定义一个print方法来显示其他对象的内容。
object . print=function(o){ console . log(o)};
var o=new Object();
对象.打印(o)
//Object(2)部署在Object.prototype对象中。
所有构造函数都有一个指向原型对象的原型属性。在Object.prototype对象上定义的所有属性和方法将由所有实例对象共享。(有关原型属性的详细说明,请参见第《面向对象编程》章。)
object . prototype . print=function(){ console . log(this)};
var o=new Object();
O.print() //Object上面的代码在Object.prototype中定义了一个print方法,然后生成Object的一个实例o。o直接继承Object.prototype的属性和方法,可以自己调用。也就是说O对象的print方法本质上是调用Object.prototype.print方法。
可以看到,上面两种打印的方法虽然功能相同,但是用法不同,所以需要区分“构造函数方法”和“实例对象方法”。
Object()
对象本身是一个函数。当它用作工具方法时,任何值都可以变成对象。这种方法通常用于确保某个值必须是一个对象。
如果参数是原始类型的值,Object方法将返回相应包装对象的实例。
Object() //返回一个空对象
Object //true的Object()实例
Object(undefined) //返回空对象
对象的对象(未定义)实例//true
Object(null) //返回一个空对象
Object的Object(null)实例//true
Object(1) //相当于新的数字(1)
Object(1)Object//true的实例
数字//true的对象(1)实例
Object(foo) //等效于新字符串( foo )
Object的Object( foo )instance//true
字符串的object( foo )instance//true
Object(true) //等效于new Boolean(true)
Object(true)Object//true的实例
boolean//true的Object (true)实例上面的代码表明Object函数可以将各种值转换成相应构造函数生成的对象。
如果Object方法的参数是一个对象,它总是返回原始对象。
var arr=[];
Object(arr) //返回原始数组
Object(arr)===arr //true
var obj={ };
Object(obj) //返回原始对象
Object(obj)===obj //true
var fn=function(){ };
Object(fn) //返回原函数
Object(fn)===fn //true使用这个,你可以写一个函数来判断一个变量是否是对象。
函数isObject(value) {
返回值===对象(值);
}
isObject([]) //true
is object(true)//false
扩展知识:其他创建对象的三种方法
1. 对象字面量{…}
对象的字面方式是最常用的方式之一,它可以快速创建带有花括号{.}包含属性。
var obj 1={ };
obj 1 . name= Tom ;
var obj2={姓名:汤姆,年龄:12 };
var name=Tom ,年龄=12;
var obj3={ name: name,age:age };
//ES2015,当属性名和变量名相同时,可以缩写为:
var obj3={姓名,年龄};
//扩展属性,ES2018的新特性,可用于克隆或合并对象,浅层拷贝,不包括原型
var obj4={.obj 3 };2. Object.create()
Object.create()方法创建一个新对象,使用现有对象提供新创建对象的__proto__。
/**
*创建具有指定原型并包含指定属性的对象。
* @param o新创建对象的原型对象。可能是空的。
* @param properties包含一个或多个属性描述符的JavaScript对象。
*/
create(o: object null,properties?PropertyDescriptorMap):any;
接口属性描述符映射{
[s:string]:property descriptor;
}
接口属性描述符{
可配置?布尔型;
可枚举?布尔型;
价值?任何;
可写?布尔型;
得到?():任意;
设置?(v:any):void;
} var obj 1=object . create(null);
object . getprototypeof(obj 1)===null;//真
var proto={ };
var obj 2=object . create(proto);
object . getprototypeof(obj 2)===proto;//真
var obj3=Object.create({},{ p:{ value:42 } });
//属性描述对象中省略的属性默认为false,所以P不可写、不可枚举、不可配置。
object . getownpropertydescriptors(obj 3);//p: {value: 42,可写:false,可枚举:false,可配置:false}
//创建一个可写、可枚举、可配置的属性p
var obj4=Object.create({},{
p: {值:42,可写:真,可枚举:真,可配置:真}
});
//不能同时指定访问器(get和set)和值或可写属性
var obj4=Object.create({},{
p: {
//value: 42,//不能与get set同时存在。
///writable: true,///不能与get set同时存在。
可枚举:真,
可配置:真,
get: function() { return 10 },
set:function(value){ console . log( Setting ` p ` to ,value);}
}
});3. Object.assign()
Object.assign()方法不是直接用来创建对象的,但是可以达到创建对象的效果,所以这里也作为创建对象的一种方式。
Object.assign()方法用于将所有自身的值从一个或多个源对象复制到目标对象。返回目标对象。
Object.assign(target,…sources)如果目标对象或源对象具有相同的属性,后一个对象的属性将覆盖前一个对象的属性。只有源对象本身的可枚举属性会被复制到目标对象。源对象原型上的对象未被处理。此方法使用源对象的Get和目标对象的Set来获取和设置值。var O1={ name: Tom };
var O2={ name: Jerry };
Var o3=Object.create(o2,{//o2是o3的原型,name: Jerry 是原型上的属性。
答:{value: 42 },//不可枚举
b: {值:42,可写:false,可枚举:true,可配置:false },
c: { enumerable: true,get:function(){ return 10;} }
});
var obj1=Object.assign(o1,O2);
obj1===o1//真
obj1//{姓名:汤姆,b: 42,c: 10}
object . getownpropertydescriptors(obj 1);//不会复制该属性。
/* b:{值:42,可写:真,可枚举:真,可配置:真}
c:{值:10,可写:真,可枚举:真,可配置:真}
名称:{value: Tom ,可写:true,可枚举:true,可配置:true} */
var o4={ a: a ,b: {姓名:汤姆,年龄:18 } };
var obj2=Object.assign({},O4);
obj 2 . b===O4 . b;//true,浅拷贝,如果源值是对对象的引用,那么只会拷贝它的引用值。
//合并对象,后面的属性覆盖前面的。
var o1={ a: 1,b:1 };
var o2={ b: 2,c:2 };
var O3={ a:3 };
var obj3=Object.assign({},o1,o2,O3);
obj3//{a: 3,b: 2,c: 2}
//基本类型会转换成包装器对象,只有字符串的包装器对象才有自己的可枚举属性。
var obj4=Object.assign({}, abc ,null,true,undefined,10,Symbol( foo ));
obj4//{0: a ,1: b ,2: c}
//如果复制过程中出现异常,将终止后续的复制任务,并保留复制的数据。
var t=Object.create( {},{ b: { value: 42,writable:false } });//b是只读属性。
Object.assign(t,{a: 1},{a: 2,b: 2,c: 3},{ c:4 });//无法分配给对象“#Object”的只读属性“b”
t;//{a: 2,b: 42}【相关推荐:javascript学习教程可枚举属性以上是讲在JavaScript中如何使用object()函数创建对象的细节。更多请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。