默认情况下,作为构造函数调用的函数返回一个普通的 Object。您可以让它们返回一些其他类型的对象,但该对象不会从构造函数的原型继承。此外,您不能更改[[Prototype]]
函数对象的 (忽略不推荐使用的proto属性)。
构造函数(它是一个函数)和由构造函数创建的对象可以具有相同方法的唯一方法是在它们的[[Prototype]]
链中共享一个对象。这只能通过扩展 Object.prototype 来完成,因为这是函数和对象都可以共享的唯一对象。
此外,您不能阻止访问对象的公共方法。您可以模拟private members,但它的模拟非常弱。但是,您可以使用方法检查调用对象是否是特定“类”的实例,例如
function Foo(){}
Foo.prototype.bar = function() {
return this instanceof Foo? 'success' : 'failure';
}
var foo = new Foo();
var blah = {};
// Call bar method of an instance of Foo
alert(foo.bar()); // success
// Call bar method on some other object
alert(Foo.prototype.bar.call(blah)); // failure
javascript 中的任何此类解决方案都很容易被欺骗,不可能以一种健壮的方式做你想做的事。