创建没有原型对象的方式
文章类型:Javascript
发布者:admin
发布时间:2023-05-11
在某些特定的场景,我们只想简单使用对象类型,不需要原型属性和方法,就需要创建没有原型的对象,有利于提高性能和优化
一:采用Object.create(null),没有任何的原型链,因此没有继承任何属性和方法,由于没有原型,不能使用 instanceof 运算符来检查它的类型。可以使用 Object.getPrototypeOf(obj) === null 来进行判断
var obj = Object.create(null);
console.log(obj); // {}
// 尝试访问 obj 的 toString 方法
console.log(obj.toString()); // TypeError: obj.toString is not a function
// 尝试使用 hasOwnProperty 方法检查 obj 是否包含某个属性
console.log(obj.hasOwnProperty("foo")); // TypeError: obj.hasOwnProperty is not a function
二:采用字面量方式,设置原型为空方式
var obj = {};
Object.setPrototypeOf(obj, null);
console.log(obj); // {}
// 尝试访问 obj 的 toString 方法
console.log(obj.toString()); // TypeError: obj.toString is not a function
// 尝试使用 hasOwnProperty 方法检查 obj 是否包含某个属性
console.log(obj.hasOwnProperty("foo")); // TypeError: obj.hasOwnProperty is not a function
三:采用字面量加__proto__设置为null方式
var obj = {};
obj.__proto__ = null;
console.log(obj); // {}
// 尝试访问 obj 的 toString 方法
console.log(obj.toString()); // TypeError: obj.toString is not a function
// 尝试使用 hasOwnProperty 方法检查 obj 是否包含某个属性
console.log(obj.hasOwnProperty("foo")); // TypeError: obj.hasOwnProperty is not a function
四:采用空构造函数设置原型为null方式
function MyObject() {}
MyObject.prototype = null;
var obj = new MyObject();
console.log(obj); // {}
// 尝试访问 obj 的 toString 方法
console.log(obj.toString()); // TypeError: obj.toString is not a function
// 尝试使用 hasOwnProperty 方法检查 obj 是否包含某个属性
console.log(obj.hasOwnProperty("foo")); // TypeError: obj.hasOwnProperty is not a function