您的位置:首页 > Web前端 > JavaScript

javascript权威指南学习笔记-对象(七)

2015-12-04 11:46 676 查看
2010年后就没怎么看技术类的书了,真的快被淘汰了

ECMAScript5 定义了一个创建对象的新方法,Object.create();

var user=Object.create({name:"zhangsan",age:123});
//该方法与下面的目的一样
var user={};
user.name="zhangsan";
user.age=123;

var user={name:"zhangsan",age:123}

var user=new Object();
user.name="zhangsan";
user.age=123;


采用Object.create()来实现原型继承

function inherit(p){
if(p==null){
throw TypeError();
}
//判断是否支持ECMAScript5的语法 如果支持直接调用
if(Object.create){
return Object.create(p);
}else{
//如果不支持则采用原型继承的方式来实现
var t=typeof p;
if(t!="Object"&&t!=="function()){
throw TypeError();
}
function F(){
}
F.prototype=p;
return new F();
}
}


属性的特性,我学习js的时候属性都是可写、可枚举、可配置的,到ECMAScript5属性的特性却不一样了。

数据属性:value、writable、enumerable、configurabel

存取器属性:get、set 、enumerable、configurable

可以通过Object.getOwnPropertyDescriptor();来获取属性描述

var user={name:123}
console.log(Object.getOwnPropertyDescriptor(user,"name"));
//输出Object {value: 123, writable: true, enumerable: true, configurable: true}


先来了解下存取器的get、set方法:

var userFun={
_name:"zhangsan",
set name(value){
this._name=value;
},
get name(){
return this._name;
}
}
userFun.name="李四";
console.log(userFun.name);
//输出为李四


看到这代码,可能会觉得多此一举

var userFun={
_name:"zhangsan",
set name(value){
this._name=value;
},
get name(){
return this._name+"123";
}
}
userFun.name="李四";
console.log(userFun.name);
//这里输出的就是 李四123咯,对值进行了修饰,在一些程序这个功能就非常有意义了


接着我们输出存取器的属性描述

var userFun={
_name:"zhangsan",
set name(value){
this._name=value;
},
get name(){
return this._name+"123";
}
}
console.log(Object.getOwnPropertyDescriptor(userFun,"name"));
//输出Object {get: function, set: function, enumerable: true, configurable: true}


如果想设置属性的特性,可以通过Object.defineProperty();

var user={
}
Object.defineProperty(user,"name",{writable:false});
user.name="zhangsan";
console.log(user.name);
//这里输出竟然是undefined
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: