You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
<script>
let o1={a:1};
let o2={b:2};
let o3={c:3};
let obj=Object.assign(o1,o2,o3);
console.log(obj); //{a:1,b:2,c:3}
console.log(o1); //{a:1,b:2,c:3} 注意目标对象自身也会改变
</script>
合并具有相同属性的对象
<script>
//属性被后续参数中具有相同属性的其他对象覆盖
let o1 = {a: 1,b: 1,c: 1};
let o2 = {b: 2,c: 2};
let o3 = {c: 3};
let obj = Object.assign({}, o1, o2, o3);
console.log(obj); // {a: 1,b: 2,c: 3}</script>
Object.create()
使用指定的原型对象和属性创建一个新对象
Object.create(proto, [propertiesObject])
简单的例子,相当于新对象在原型链上面
<script>
var person={name:'Harrdy',isBoy:true};
var p=Object.create(person);
console.log(p.__proto__===person); //true
console.log(p.name); //Harrdy
console.log(p.isBoy); //true
p.age=18;
console.log(person.age); //undefined
</script>
使用 Object.create() 的 propertiesObject参数
<script>
function Person() {this.name="Harrdy";this.age='18';}
var p1=new Person();
var p=Object.create(p1,{isBoy:{writable:true,configurable:true,value:true},fff:{get:function(){console.log(this);//this代表p,p就是实例console.log("you are getting it");},set:function(value){console.log("you are setting it");}}});
console.log(p.name,p.age,p.isBoy); //Harrdy 18 true
p.fff="hahhahh";
p.fff;
</script>
<script>
let person={name:'Harrdy'};
Object.defineProperty(person,'name',{get:function(){console.log("You have getting it");},set:function(){console.log("You have setting it");}});
person.name; //You have getting it
person.name='lk'; //You have setting it
</script>
<script>
function Vector2( x, y ) {this.x=x||0;this.y=y||0;}
Object.defineProperties( Vector2.prototype, {"width": {get: function(){console.log(this.__proto__===Vector2.prototype);//trueconsole.log(this);//这里this指的是Vector2对象的实例,即v1returnthis.x;},set: function(value){console.log(this.__proto__===Vector2.prototype);//truethis.x=value;}},"height": {get: function(){returnthis.y;},set: function(value){this.y=value;}}});
var v1=new Vector2(1,1);
v1.width;
console.log(JSON.stringify(v1)); //{"x":1,"y":1}
v1.width=2;
console.log(JSON.stringify(v1)); //{"x":2,"y":1}</script>
Object.getOwnPropertyDescriptor()
返回对象指定的属性配置
Object.getOwnPropertyDescriptor(obj, prop)
<script>
var person={name:"Harrdy",age:18};
var desc=Object.getOwnPropertyDescriptor(person,'name');
console.log(desc);
console.log(JSON.stringify(desc));
//{"value":"Harrdy","writable":true,"enumerable":true,"configurable":true}</script>
Object.getOwnPropertyDescriptors()
所指定对象的所有自身属性的描述符,如果没有任何自身属性,则返回空对象
Object.getOwnPropertyDescriptors(obj)
<script>
var person={name:"Harrdy",age:18};
var descs=Object.getOwnPropertyDescriptors(person);
console.log(descs);
console.log(JSON.stringify(descs));
/*
{"name":{"value":"Harrdy","writable":true,"enumerable":true,"configurable":true},"age":{"value":18,"writable":true,"enumerable":true,"configurable":true}}
*/
</script>
Object.keys()
返回一个包含所有给定对象自身可枚举属性名称的数组
Object.keys(obj)
<script>
var arr=[1,2,3];
console.log(Object.keys(arr)); //数组键["0", "1", "2"]
var obj={'a':1,'c':2,'d':4};
console.log(Object.keys(obj)); //["a", "c", "d"]
</script>
Object.values()
返回给定对象自身可枚举值的数组
Object.values(obj)
<script>
var arr=[1,2,3];
console.log(Object.values(arr)); //属性值数组[1,2,3]
var obj={'a':1,'c':2,'d':4};
console.log(Object.values(obj)); //[1,2,4]
</script>