Skip to content

Instantly share code, notes, and snippets.

@lixiaoyan
Last active December 25, 2015 22:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lixiaoyan/7052009 to your computer and use it in GitHub Desktop.
Save lixiaoyan/7052009 to your computer and use it in GitHub Desktop.
//来自 http://wiki.ecmascript.org/doku.php?id=harmony:extended_object_api
Object.getPropertyDescriptor = function(subject, name) {
var pd = Object.getOwnPropertyDescriptor(subject, name);
var proto = Object.getPrototypeOf(subject);
while (pd === undefined && proto !== null) {
pd = Object.getOwnPropertyDescriptor(proto, name);
proto = Object.getPrototypeOf(proto);
}
return pd;
}
Object.getPropertyNames = function(subject, name) {
var props = Object.getOwnPropertyNames(subject);
var proto = Object.getPrototypeOf(subject);
while (proto !== null) {
props = props.concat(Object.getOwnPropertyNames(proto));
proto = Object.getPrototypeOf(proto);
}
// FIXME: remove duplicate property names from props
return props;
}
//原始对象
var arr=[];
//chrome下旧式Proxy调用,需开启flags(chrome:flags)
//firefox下请使用新式API,具体用法自定MDN
var pro=Proxy.create({
getOwnPropertyDescriptor:function(name){
var ret=Object.getOwnPropertyDescriptor(arr,name);
console.log("getOwnPropertyDescriptor",name,"=>",ret);
return ret;
},
getPropertyDescriptor:function(name){
var ret=Object.getPropertyDescriptor(arr,name);
console.log("getPropertyDescriptor",name,"=>",ret);
return ret;
},
getOwnPropertyNames:function(){
var ret=Object.getOwnPropertyNames(arr);
console.log("getOwnPropertyNames","=>",ret);
return ret;
},
getPropertyNames:function(){
var ret=Object.getPropertyNames(arr);
console.log("getPropertyNames","=>",ret);
return ret;
},
defineProperty:function(name,des){
console.log("defineProperty",name,des);
return Object.defineProperty(arr,name,des);
},
delete:function(name){
var ret=delete arr[name];
console.log("delete",name,"=>",ret);
return ret;
}
});
//控制台时打如下代码时注意想办法屏蔽掉代码提示
//比如先输入一个分号;然后把光标移到最前面再打代码
console.log("========== push(5) ==========");
pro.push(5);
console.log("========== pop() ==========");
pro.pop();
void(0);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment