所以这很奇怪。我写了自己的小响应开关声明:
setView = function(x){
switch(true){
case x > 1250:
if(view != desktop){
view = desktop;
startView();
}
break;
case x <= 1250 && x >= 924:
if(view != tablet){
view = tablet;
startView();
}
break;
default:
if(view != mobile){
view = mobile;
startView();
}
break;
}
}
其中x
是浏览器的大小。将view
从tablet
切换为mobile
时,mobile
保留了一些tablet
的功能。这是预期的行为吗?在我看来,这不应该发生。
我已将我的代码压缩为fiddle来演示我正在谈论的内容。
预期行为:
观察到的行为:
根据我的理解,原型应该改变所有实例,而简单赋值foo.attribute =
应该只改变实例。我对原型的理解有缺陷吗?为什么会这样?我通过在mobile.component.hook
中重新分配mobile._component
默认值来解决问题,但在我看来,我不应该这样做。
答案 0 :(得分:2)
问题是两个视图共享相同的Component
对象,因为您只创建一个并将其分配给View
的原型。
要使视图具有单独的Component
对象,您需要为您创建的每个视图创建一个实例:
//Setting up everything
function View(){
this.component = new Component();
}
function Component(){}
Component.prototype.hook = function(){alert("Should be default")}
View.prototype._component = function(){throw "this function is called on Component change, so override.";};