详解 Object 对象的6种方法

一、Object.setPrototypeOf(a,b) 与 Object.getPrototypeOf(a)

说明:Object.setPrototypeOf(a,b)是设置对象的原型,a为目标对象,b为原型对象,通常是b.prototype。

           Object.getPrototypeOf(a)是获取对象的原型。a为目标对象,返回值是a的原型对象,即b.prototype。

function a(){};
function b(){};
Object.setPrototypeOf(a,b.prototype);//即设置了a的原型为b,记住这里是b.prototype而不是b;
console.log(a.__proto__===b.prototype);//true

//Object.setPrototypeOf(a,b.prototype)等同于a.__proto__=b.prototype;

b.prototype.name='jack';//在b的原型上添加name属性;
console.log(a.name)//jack

console.log(Object.getPrototypeOf(a)===b.prototype);//true

二、Object.create(a)

说明:Object.create(a)是创建对象并将参数对象的属性方法添加到目标对象上,a对象的所有属性和方法将被添加到目标对象。

var a={name:'jack'};
var b = Object.create(a);
console.log(b)//{};
console.log(b.name)//'jack',即a对象的所有属性和方法添加到b的__proto__属性上,所以可以通过b.__proto__找到name属性。

//等同于var b={};b.__proto__=a;

三、Object.defineProperty(a,b,c)与Object.defineProperties(a,b)

说明:Object.defineProperty(a,b,c)是设置对象属性以及属性描述,a是对象名称,b是属性名,c是属性描述,通常是一个对象。

           Object.defineProperties(a,b)是设置对象属性集以及相关属性描述,a是对象名称,b是属性及相关描述集合。

var obj={};
Object.defineProperty(obj, "name", {
  enumerable: false,//设置为false,该属性不能被枚举
  configurable: false,//设置为false,该属性将不可编辑,不可删除
  writable: false,//设置为false,该属性不能直接赋值修改
  value: "jack"
});
console.log(obj)//{'name':'jack'}
Object.defineProperties(obj, {
"name":{
  enumerable: false,
  configurable: false,
  writable: false,
  value: "jack"
},
"age":{
  enumerable: false,
  configurable: false,
  writable: false,
  value: 28
},
});
console.log(obj)//{'name':'jack','age':28}

四、Object.getOwnPropertyNames(a) 与 Object.getOwnPropertyDescriptor(a,b)

说明:Object.getOwnPropertyNames(a)是获取自身属性的集合数组,a为目标对象;

          Object.getOwnPropertyDescriptor(a,b)是获取自身属性的集合描述,a为目标对象,b为属性。

var a={name:'jack'};
var b={age:12};
a.__proto__=b;
var names=Object.getOwnPropertyNames(a);
console.log(names);//['name'];

//Object.getOwnPropertyNames(a)等同于Object.keys(a);

//注意区别
for(var i in a){
console.log(i);
};//name,age

//顺便提一下hasOwnProperty方法,该方法返回一个布尔值,判断是否是对象自身的属性,而不是继承来的属性
console.log(a.hasOwnProperty('name'));//true
console.log(a.hasOwnProperty('age'));//false
var a={name:'jack'};
var descriptor=Object.getOwnPropertyDescriptor(a,'name');
console.log(descriptor);//{value: "jack", writable: true, enumerable: true, configurable: true};

五、Object.getOwnPropertySymbols(a)

说明:Object.getOwnPropertySymbols(a)是获取对象的Symbol类型的属性,a为目标对象。

var a=Symbol('name'),b=Symbol('title');
var obj={
   [a]:'jack',
   [b]:'hello',
   age:12
};
console.log(Object.getOwnPorpertySymbols(obj));[Symbol(name),Symbol(title)]

六、对象的存取描述符属性 set 和 get 方法

说明:set和get方法是访问器(存取描述符)属性。

var obj={},val;
Object.defineProperty(obj,name,{
    configurable : true,
    enumerable : true,
    get: function() {
        return val
    },
    set: function() {
        val= 2;
    },
});
console.log(obj.name)//undefined,取值的时候val为undefined;
obj.name = 'jack';
console.log(obj.name);//2,赋值的时候val为2;

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在Django中,QuerySet和Object是两个不同的概念。 1. QuerySet QuerySet是Django中的一个概念,它表示数据库操作的结果集合。QuerySet可以像列表一样进行迭代、切片等操作,但是它并不是真正的列表。当你执行一个查询操作时,Django会返回一个QuerySet对象,这个对象包含了一些查询结果的方法。这些方法可以用来进行进一步的过滤、排序、切片等操作。QuerySet是惰性的,这意味着它只有在需要的时候才会执行查询,这有助于提高性能。 例如,以下代码创建了一个QuerySet对象,它包含了所有年龄大于18岁的用户: ``` from django.contrib.auth.models import User users = User.objects.filter(age__gt=18) ``` 2. Object Object指的是Django模型中的一个实例。一个模型是一个数据库表的抽象,它定义了表的结构和字段,每个实例则代表了表中的一行数据。你可以使用ORM API来创建、更新、删除和查询模型实例。 例如,以下代码创建了一个User模型的实例: ``` from django.contrib.auth.models import User user = User.objects.create(username='john') user.first_name = 'John' user.last_name = 'Doe' user.save() ``` 在这个例子中,我们首先创建了一个User实例,然后通过修改它的属性来更新它,最后使用save()方法将更改保存到数据库中。 总结 QuerySet和Object是Django中的两个不同的概念,它们分别代表了数据库操作的结果集合和模型中的一个实例。QuerySet是一个惰性的对象,它包含了一些查询结果的方法,可以用来进行进一步的过滤、排序、切片等操作。Object则代表了一个模型实例,你可以使用ORM API来创建、更新、删除和查询它。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值