用这种方式,后面的程序创建汽车实例将只依赖factory.createVehicle这个入口函数,大大降低了耦合。 由于IE8并不支持Object.create,我们可以用MDN提供的polyfill进行兼容处理。 //Polyfillif(!Object.create) { Object.create=function(o) {if(arguments.length > 1) {thrownewError('Object.create implementation only a...
所以最好的方式是透過new.target5加以限制: functionFooConstructor(name){if(!new.target)throw"FooConstructor() must be called with new";this.name = name;this.hello =function(){console.log(`Hello,${this.name}`); } }// FooConstructor("JavaScript"); // error! FooConstructor() must be call...
// 观察者 function Observer(options) { let {name} = options; this.subjects = {}; this.name = name; } Observer.prototype.update = function() { console.log(`'${this.name}' 执行 update 函数`); } Observer.prototype.subscribe = function(subject) { this.subjects[subject.id] = subject; ...
function doStuff () { // We can use both spec // and secret in here } } // secret is not accessible out here const thing = makeThing() thing.secret // undefined 由于闭包特性嵌套方法可以访问到 secret 对象,但是外部无法访问具体可以参考MDN。 继承 如果我们打算制作一个电商应用,我们很快意识到...