检查参数是构造函数还是javascript中的实例
Checking if parameter is a contructor or an instance in javascript
我想做以下操作,如果传递的参数是构造函数,那么做new 'constructor'
,如果不是,只使用实例。我该怎么做?
这是我迄今为止所做的,但没有奏效。我认为我的代码有问题:
JS-
var showList = function (view, options) {
// checking if view is a conctructor or not
if (view instanceof view) {
app.getRegion('main').show(view(options));
} else {
app.getRegion('main').show(new view(options));
}
}
因此上述函数可用作:
var listView = new ListView;
showList(listView);
或直线:
showList(new ListView);
我想你会想测试参数是对象还是函数:
if (typeof view === "function")
会告诉你这是一个函数(在你的上下文中是一个构造函数(
if (typeof view === "object")
会告诉你这是一个已经构建好的对象。
var showScreen = function (view, options) {
// check if view is already an object
if (typeof view === "object") {
app.getRegion('main').show(view(options));
} else {
app.getRegion('main').show(new view(options));
}
}
在您的代码中,我感到困惑的一件事是,如果view
已经是一个对象,那么为什么要执行view(options)
。这对我来说没有意义。当view
是一个函数时执行new view(options)
是有意义的,但不是另一个选项,所以我认为也需要用这行代码来纠正一些问题。你可能是想在那个对象上调用一个方法吗?
仅供参考,如果有其他选择,我倾向于避免使用instanceof
作为一般做法,因为instanceof
可能存在跨帧代码问题,而typeof
则没有这些问题。
var showScreen = function (view, options) {
// checking if view is a conctructor or not
if (view instanceof Function) {
app.getRegion('main').show(new view(options));
} else {
app.getRegion('main').show(view(options));
}
}
也许不是最好的方法,但很好。
function A(){}
var a = new A();
a instanceof A // true
a instanceof Function // false
A instanceof Function // true
这对我来说就像是一种代码气味。我认为最好传递一个实例,而不是构造函数。
在这种情况下,你可以做:
showScreen(new ListView(options))
如果很难构建ListView
,您应该想知道为什么是这样。
相关文章:
- 我应该如何用javascript实例化这个日期
- bootstrap选择javascript实例化不创建对象
- 嵌套函数中的 JavaScript 实例共享
- 运算符的 JavaScript 实例在应该为 false 时返回 true
- 为什么我的 JavaScript 实例返回相同的内容
- 类的 JavaScript 实例
- Javascript 实例变量显示为未定义
- 为什么可以'我在Rhino上使用JavaScript实例化了TestCase的一个子类
- Javascript实例上下文原型
- 不会扰乱eslint的javascript实例化模式
- 何时使用对象.prototype / JavaScript实例方法
- 如何判断两个JavaScript实例是否属于同一类类型
- 闭包中的Javascript实例化.如何使工厂和模型独立
- TypeError & # 39;事# 39;未定义,带有javascript实例
- 如何在jquery中使用javascript实例/通过jquery选择javascript句柄
- 在JavaScript实例上编写单个原型和使用多个原型之间的区别?只是风格
- javascript实例方法未找到:object#
- 从构造函数中引用Javascript实例变量而不使用'this'关键字
- Javascript实例和这个
- Javascript:实例化对象数组的最佳方式