設定物件原型
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。