这可能是最安全的方式(案例 A):
var myClass = function() { };
myClass.prototype = {
doSomething : function() { alert('Something'); }
};
这是替代方案(案例 B):
var myClass = function() {
this.doSomething = function() { alert('Something'); };
};
我的印象是,通过如案例 B 所示执行此操作,doSomething 将成为一个成员,并且该函数将为我实例化的每个 myClass 对象定义一次,以便它将在 100 个实例的内存中存在 100 次,而在案例 A 函数只存在于内存中的一个地方,不同的实例只会引用原型。
我是否正确理解这一点?
作为一个额外的问题:在案例 B 中执行此操作时,chrome 开发人员为我提供了 doSomething 的智能感知,但我必须扩展 __proto__ 才能看到它。为什么它没有出现在对象本身上?也就是说,为什么原型成员没有显示在对象上,而是被困在 __proto__ 上?如果 __proto__ 堆栈会被展平并直接显示在对象上,我会更喜欢。是否有另一个案例会允许这种情况发生?