global移除,使用window替代,全局对象为window对象,全局作用域this指向window对象,window原型链补齐,module、require、fs、path、__filename以及__dirname等全局对象的使用请通过xbs对象来进行访问,示例如下:
var { add } = xbs.require("./test.js");
console.log(xbs.__filename, xbs.__dirname);
xbs.module.exports = {
a: 1
}直接运行,调试可使用--inspect-brk参数,示例如下:
node --inspect-brk app.js自动拦截全局对象的属性和方法的访问和赋值操作。
globalThis.xbs.globalGetter = function (target, property){
console.log("globalGetter", property);
};
globalThis.xbs.globalSetter = function (target, property, value) {
console.log("globalSetter", property, value);
}var a = xbs.createInterceptor({
getter(target, property) {
console.log("对象:",target,"获取属性:",property,"值:", target[property]);
},
setter(target, property, value) {
console.log("对象:", target,"设置属性:", property,"值:", value);
return {
intercept: true,
value: value
}
},
})
a.xxx = 123;
a.xxx;var abc = xbs.createUndetectable(function () {
return "ok"
}, {
getter(target, property) {
console.log("对象:",target,"获取属性:",property,"值:", target[property]);
},
setter(target, property, value) {
console.log("对象:", target,"设置属性:", property,"值:", value);
return {
intercept: true,
value: value
}
},
query(target, property) {
console.log("对象:", target, "属性:", property, "调用了getOwnPropertyDescriptor")
},
deleter(target, property) {
console.log("对象:", target,"删除属性:", property);
},
enumerator(target) {
console.log("对象:", target, "调用了getOwnPropertyNames");
},
definer(target, property, descriptor) {
console.log("对象:", target, "属性:", property, "属性描述符:", descriptor);
},
descriptor(target, property) {
console.log("对象:", target, "属性:", property, "调用了getOwnPropertyDescriptor")
}
})
console.log(abc(0))
console.log(typeof abc)
console.log(abc == null)
abc[0] = 123;
abc[0];var HTMLDocument = xbs.createFunction("HTMLDocument", 4, function () {
// ...
}, {
isConstructor: true,
isReadOnlyPrototype: true
});- 参数1: 通过原型构造出来的示例对象配置
| 参数 | 说明 |
|---|---|
| isImmutableProto | 设置是否为不可变原型对象 |
- 参数2: 原型构造函数配置
| 参数 | 说明 |
|---|---|
| name | 原型构造函数名 |
| length | 原型构造函数参数长度 |
| isReadOnlyPrototype | 原型对象是否只读 |
| constructor | 原型构造函数具体实现 |
var { instance: document, constructor: HTMLDocument } = xbs.createObject({
isImmutableProto: false
}, {
name: "HTMLDocument",
length: 0,
isReadOnlyPrototype: true,
constructor: function () { },
}, {
getter: function (target, property) {
console.log("getter", property);
},
setter: function (target, property, value) {
console.log("setter", target.toString(), property, value);
}
})var a = {};
Object.defineProperty(a, "abc", {
get: xbs.createGetter("abc", function () {
// ...
}),
set: xbs.createSetter("abc", function (value) {
// ...
})
})通过xbs对象设置的私有属性,在js层是无法遍历到的
var a = {};
// 设置私有属性
xbs.setPrivate(a, "a", 123);
// 获取私有属性
console.log(xbs.getPrivate(a, "a"));
// 删除私有属性
xbs.deletePrivate(a, "a");- 已补齐全局对象整个原型链
- 补齐node内置对象的toString保护
- 错误堆栈检测关键行已移除
- 已内置navigator、history和screen对象
- navigator对象上的userAgent属性值已更改,其他属性也已添加
- history和History对象已添加
- screen和Screen对象已添加
- NetworkInformation和ScreenOrientation对象已添加