标签:技术 ber image getter set 读写 lock you code
var obj = {x:1,y:2};
var obj2 = {
x:1,
y:2,
o:{
z:3,
n:4
}
};
function foo(){}
foo.prototype.z = 3;
var obj = new foo();
obj.y = 2;
obj.x = 1;
obj.x; //1
obj.y; //2
obj.z; //3
type of obj.toString; // ‘function‘
‘z‘ in obj; //true,z从foo.prototype继承而来
obj.hasOwnProperty(‘z‘); //false,obj这个对象本身没有z属性
function foo(){}
foo.prototype.z = 3;
var obj = new foo();
obj.y = 2;
obj.x = 1;
obj.z = 5;
obj.hasOwnProperty(‘z‘);//true
foo.prototype.z; //still 3
obj.z; //5
obj.z = undefined;
obj.z; //undefined
//此时如果要访问原型z,需要删除obj的z属性
delete obj.z; //true
obj.z; //3
delete obj.z; //再次删除,不会删除原型链
obj.z; //still 3!!!
创建一个对象,对象的原型指向里面的参数
var obj = Object.create({x:1});
obj.x; //1
typeof obj.toString //‘function‘
obj.hasOwnProperty(‘x‘);//false
var obj = Object.create(null);
obj.toString //undefined
var yz;
if(obj.y){ //检测属性
yz = obj.y.z
}
//利用运算符达到同样效果
var yz = obj && obj.y && obj.y.z
var person = {age:20, title:‘fe‘};
delete person.age; //true
delete person[‘title‘];//true
person.age;//undefined
//再次删除不存在的属性
delete person.age; //true,还是会返回true
delete Object.prototype;//false
//因为Object.prototype被配置为不可修改;
var descriptor = Object.getOwnPropertyDescriptor(Object,‘prototype‘);
descriptor.configurable;//false
var cat = new Object;
cat.legs = 4;
cat.name = ‘Kitty‘;
‘legs‘ in cat;//true
‘abc‘ in cat;//false
‘toString‘ in cat;//true,运算符in会向上查找,toString继承于Object.property
//检测属性是否为自身拥有
cat.hasOwnProperty(‘legs‘);//true
cat.hasOwnProperty(‘toString‘);//false
//检测属性是否可枚举
cat.propertyIsEnumberable(‘legs‘);//true
cat.propertyIsEnumberable(‘toSgring‘);//false
Object.defineProperty(cat,‘price‘,{enumerable:false,value:1000});
cat.propertyIsEnumberable(‘price‘);//false
cat.hasOwnProperty(‘price‘);//true
补充:属性一旦设置configurable:false,将不可再变回可配置
//如果不想遍历原型链的属性
for(key in obj){
if(obj.hasOwnProperty(key)){
//do something
}
}
该方法多数默认值为false,而我们常用的定义方式多为可枚举,删除,赋值等
参数
obj
要在其上定义属性的对象。
prop
要定义或修改的属性的名称。
descriptor
将被定义或修改的属性描述符。
---
该方法允许精确添加或修改对象的属性。通过赋值来添加的普通属性会创建在属性枚举期间显示的属性(for...in 或 Object.keys 方法), 这些值可以被改变,也可以被删除。这种方法允许这些额外的细节从默认值改变。默认情况下,使用Object.defineProperty()添加的属性值是不可变的。
数据描述符和存取描述符均具有以下可选键值:
数据描述符
存取描述符
标签:技术 ber image getter set 读写 lock you code
原文地址:https://www.cnblogs.com/y-dt/p/9381439.html