在他的书“ Javascript - 好的部分”中,Douglas Crockford提到了构造函数调用模式(这是我们使用{{1}实例化simili类的方法。关键字:
构造函数调用模式JavaScript是一个原型 继承语言。这意味着对象可以继承属性 直接来自其他对象。该语言是无类别的。这是一个 彻底背离现在的时尚。今天大多数语言都是 经典的。原型继承具有强大的表现力,但是 没有被广泛理解。 JavaScript本身并不自信 原型性质,所以它提供了一个对象制作语法 让人联想到古典语言。很少有经典程序员 发现原型继承是可以接受的,而且是经典的 灵感的语法掩盖了语言真正的原型本质。它是 两个世界中最糟糕的。如果使用new调用函数 前缀,然后将创建一个新的对象与隐藏的链接 函数的原型成员的值,这将受到约束 那个新对象。新的前缀也改变了行为 退货声明。
new
然后他建议使用闭包来避免构造函数调用,如下所示:与新前缀一起使用的函数称为构造函数。按照惯例,它们用变量保存在变量中 大写名称。如果在没有新前缀的情况下调用构造函数, 没有编译时或运行时警告就会发生非常糟糕的事情, 所以资本化公约非常重要。使用此 不建议使用构造函数的样式......
...如果使用新前缀调用该函数并且返回值不是对象,则返回此(新对象) 代替。
// Create a constructor function called Quo.
// It makes an object with a status property.
var Quo = function (string) {
this.status = string;
};
// Give all instances of Quo a public method
// called get_status.
Quo.prototype.get_status = function () {
return this.status;
};
// Make an instance of Quo.
var myQuo = new Quo("confused");
document.writeln(myQuo.get_status()); // confused
我的问题是这样的:有没有办法不使用构造函数调用和knockout中的applyBinding()调用,并将对象构建为文字而不是函数?并使用// Create a maker function called quo. It makes an
// object with a get_status method and a private
// status property.
var quo = function (status) {
return {
get_status: function () { return status;}
};
};
// Make an instance of quo.
var myQuo = quo("amazed");
document.writeln(myQuo.get_status( ));
代替object.create()
关键字?