【发布时间】:2015-06-03 07:14:20
【问题描述】:
我有一个类,它有两个方法:get(),set()。
function A() {
var value = '';
this.get = function () {
return value;
};
this.set = function (v) {
value = v;
};
}
我有一个函数f():
/**
*
* @param { String | Number } b
*/
function f(b){
var value;
if(b instanceof A){
value = b.get();
}else{
value = b;
}
}
我可以创建一个对象:
var test = new A();
test.set('Hello');
f(test); //Hello
f(10); //10
instanceof 运算符测试对象的原型链中是否具有构造函数的原型属性。
我听说使用此运算符是一种不好的做法。
问题是:从我的代码中删除 instanceof 运算符是不可能的吗?
也许我应该使用强制类型转换或使用另一个 getter、setter?
>
我找到了简单的解决方案,我可以将 b.get 强制转换为布尔类型并检查它。它有效,但可能有附带影响。
value = (!!b.get) ? b.get(): b;
>
另一种方式:value = (b.constructor = A) ? b.get(): b;
【问题讨论】:
-
我听说使用此运算符是一种不好的做法 - 我想不出为什么会这样。不过,在这种特定情况下,您可以测试
get()方法的存在,而不是检查A的特定实现 -
在这种情况下,您可以使用 typeof 运算符。
标签: javascript class oop instanceof