JS学习-04.对象以及创建对象

创建对象-new/原型链

function foo(){};
foo.prototype.z=3;
//此时使用new 构造器创建foo()的实例
var obj = new foo();
obj.y = 2;//obj的原型[[proto]]指向构造器的原型   foo.prototype
obj.hasOwnProperty('z')//false因为这个属性并不在obj本身的原型上
obj.z=undefined;
obj.z;//undefined,这时候要使用Object.hasOwnProperty判断对象本身是否有z这个属性

创建对象-Object.creat

var obj = Object.create({x:1})//obj->{x:1}->Object.prototype
x不是obj本身的属性

对象属性操作

属性读写-异常

var obj = {x:1};

var yz = obj.y.z//报错,undefined

//可以使用if判定obj.y是否存在
if(obj.y){
    yz = obj.y.z
}
//或者使用&&
var yz = obj && obj.y && obj.y.z

属性删除

  1. 当delete Object.obj返回true时,不代表是删除成功,只是这个属性已经不存在了
  2. Object.prototype内的属性不可被删除
  3. var定义的全局变量 不可被删除
  4. function fd(){};delete fd//false
  5. 隐式全局变量No = 1;可以 被删除
  6. eval中使用var定义的变量可以被删除

属性检测

  1. 使用propertyIsEnumerable检测属性是否可以被枚举,一般原型链上prototype很多方法返回都是false,不可被枚举
  2. 使用Object.defineProperty(cat,‘price’,{enumerable:false,value:1000})//其实使用Object.defineProperty定义的属性,默认enumerable就是false

属性的枚举

var o = {x:1,y:2};
var obj = Object.create(o);
obj.a = 4;
for(key in obj){
    console.log(key)
}
//如果只要枚举对象本身的属性,可使用hasOwnProperty过滤
for(name in obj){
    if(obj.hasOwnProperty(name)){
        console.log(name)
    }
}

get set方法

属性标签

使用Object.getOwnPropertyDescriptor(Object,‘name’)可以得到属性标签

  1. writable:true表示可写 enumerable:true表示可以被枚举,configurable:true表示能被配置(delete)
  2. 设置空对象,要设置对象的属性标签,可以使用Object.defineProperty(obj,字符串属性名字,{value:“auto”,writable:true表示可写 enumerable:true表示可以被枚举,configurable:true表示能被配置(delete)})

全局对象

  1. 全局对象的属性是全局定义的符号,js程序可以直接使用,当js解释器启动时(或者任何浏览器加载新页面的时候),它创建新的全局对象,并给他一组定义的属性
    • 全局属性,undefined,Infinity和NaN等
    • 全局函数,比如isNaN(),parseInt()等
    • 构造函数,Date(),RegExp(),String()等
    • 全局对象,比如Math(),JSON
  2. 如果代码声明了一个全局变量,那全局变量就是全局对象的一个属性
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值