这是ES5的Object.create的独立实现:
window.createObject = (function() {
var F = function () {};
return function(o) {
F.prototype = o;
return new F();
}
}());
及其使用示例:
var cat = createObject(animal);
我注意到animal
的内部在尝试调用私有函数时变得有点混乱,例如:
animal = (function() {
function privFunc(arg) {
this.property;
}
function publFunc(arg) {
privFunc.call(this, arg);
}
return {
publFunc: publFunc
}
}());
是否有更简洁的方式来遵循这种模式?特别是,无需privFunc.call(this, arg)
。
另一种方式,同样丑陋的是:
function privFunc(animal, arg) {
animal.property;
}
function publFunc(arg) {
privFunc(this, arg);
}
答案 0 :(得分:1)
不幸的是,这是组合Object.create和私有函数的唯一方法。创建的新对象只能访问定义原型的模块公开的公共方法。在模块中使用私有方法需要将您想要使用的对象传递给那些方法 - 作为命名参数或操纵this
的值