【发布时间】:2013-02-24 00:22:51
【问题描述】:
我想要这样的东西
var isChild = isInstanceOf( var1, 'Constructor')
应该相当于
var isChild = (var1 instanceof Constructor)
问题是我在范围内没有可用的函数构造函数,所以我只想传递一个字符串。
我想我应该遍历原型链以获得constructor.toString()然后比较它,但我不太知道如何实现它。
--
我会稍微补一下上下文,主要是我找到了更好的解决方案
我在两个函数构造函数之间有一个循环引用,当我尝试引用它时,RequireJS 一直返回 undefined。 (在上述情况下,构造函数是未定义的。)
我找到了这条信息:http://requirejs.org/docs/api.html#circular
这是导致问题的代码:
//(in BaseControl.js)
define(['src/utils/models/Field'],
function(Field) {
[...]
setField: function(field) {
if (!field instanceof Field) throw new Error('field should be an instance of Field');
[...]
问题是 Field 也需要 BaseControl,所以在这种情况下 Field 是未定义的,我收到以下错误:
Uncaught TypeError: Expecting a function in instanceof check, but got false
我可以按照 requireJS 文档解决它:
define(['require', 'src/utils/models/Field'],
function(require, Field,) {
[...]
setField: function(field) {
if (!Field) Field = require('src/utils/models/Field');
if (!field instanceof Field) throw new Error('field should be an instance of Field');
[...]
【问题讨论】:
-
哦,使用 ecma 标准函数的额外积分(所以我会尽量避免 proto 如果可能...)
-
为什么你没有在范围内的构造函数?那么在什么范围内呢?
-
我正在使用 requireJS,如果我需要构造函数,我会得到一个循环引用,所以我正在寻找一种方法来验证参数的类型而不需要它。
-
“循环引用”是什么意思?那会有什么问题呢?
-
非常感谢您的关注,Bergi。我又看了一遍循环引用问题并解决了它。我更新了问题。
标签: javascript inheritance prototypejs requirejs circular-dependency