设置对象原型
Version >= 五
使用 ES5 +,Object.create
函数可用于创建具有任何其他 Object 的 Object 作为其原型。
const anyObj = {
hello() {
console.log(`this.foo is ${this.foo}`);
},
};
let objWithProto = Object.create(anyObj);
objWithProto.foo = 'bar';
objWithProto.hello(); // "this.foo is bar"
要显式创建没有原型的 Object,请使用 null
作为原型。这意味着 Object 也不会从 Object.prototype
继承,并且对于用于存在检查字典的对象很有用,例如
let objInheritingObject = {};
let objInheritingNull = Object.create(null);
'toString' in objInheritingObject; // true
'toString' in objInheritingNull ; // false
Version >= 6
例如,从 ES6 开始,可以使用 Object.setPrototypeOf
更改现有 Object 的原型
let obj = Object.create({foo: 'foo'});
obj = Object.setPrototypeOf(obj, {bar: 'bar'});
obj.foo; // undefined
obj.bar; // "bar"
这几乎可以在任何地方完成,包括在 this
对象或构造函数中。
注意: 此过程在当前浏览器中非常慢,应该谨慎使用,尝试使用所需的原型创建 Object。
Version < 五
在 ES5 之前,使用手动定义的原型创建 Object 的唯一方法是使用 new
构建它
var proto = {fizz: 'buzz'};
function ConstructMyObj() {}
ConstructMyObj.prototype = proto;
var objWithProto = new ConstructMyObj();
objWithProto.fizz; // "buzz"
这种行为非常接近于可以编写 polyfill。