对象实例化为"";新的";from闭包不能直接访问返回对象的属性
Object instantiated as "new" from closure cannot directly access properties of returned object
我正在尝试创建一个UI组件的JavaScript库,这些组件通常被我的团队中的项目使用。我有以下代码来定义库。
var libName = function() {
var _libName = this;
_libName.componentName = function () {
// Some Private Variables
var _componentName = function (args) {
// Construct the object...
};
_componentName.addObject = function (args) {
// Add an object...
};
_componentName.removeObject = function (args) {
// Remove an object...
};
return _componentName;
}();
return _libName;
}();
现在,当我在页面中使用它来创建组件时,我会调用以下代码。
var component = new libName.componentName(args);
它初始化得很好,并创建了我所期望的基本组件。现在我想向组件添加一些数据,所以我调用以下函数。
component.addObject(someObject);
但是,它并没有像我期望的那样调用函数,而是说组件对象没有属性"addObject"。我用以下代码对此进行了研究。
if (libName.componentName.addObject) {
console.log("libName.componentName.addObject exists"); // Logs
}
if (component.addObject) {
console.log("component.addObject exists"); // Doesn't log
}
if (component.constructor.addObject) {
console.log("component.constructor.addObject exists"); // Logs
}
所以我的问题是这里到底发生了什么?为什么对象(在本例中是组件(不能访问我期望的属性/函数?这与我使用记忆闭包来定义库的事实有关吗?如何使从该库初始化的对象能够访问这些属性/函数?
使用函数的原型来定义实例方法:
_componentName.prototype.addObject = function (args) {
// Add an object...
};
_componentName.prototype.removeObject = function (args) {
// Remove an object...
};
脚本不起作用,因为您正在调用_componentName属性,如果在对象上直接定义了这些属性,则这些属性不会传递给_componentRame的实例。记住使用new意味着使用原型继承。Javascript没有基于类的继承。
相关文章:
- "“;变量未引用正确的对象
- 如何创建js常量对象与"依赖/相对;价值观
- "属性描述必须是对象“”;错误
- 获取"下一个“;对象中的数值
- 得到"TypeError:对象不是函数“”;在forEach循环中使用超级测试/超级代理时
- "键“;jQuery中的对象无法正常工作
- 为什么下面抛出一个“;对象没有't支持属性或方法'importNode'"在IE11中
- "未捕获[对象对象]”;投掷和接球时
- "对象不是函数“;当将Node.js HTTP服务器对象传递给Socket.IO时
- 将对象设置为Backbone.js模型,而不必调用“;set()"在每一处房产上
- 得到"未捕获的类型错误:未定义的不是函数“;当试图从对象调用get()或set()时
- 获得错误“;对象没有方法'jScrollPane'"与AngularJS一起使用时
- "类型错误:'null'不是对象(正在评估“a.nodeType')”;在phanto
- "这个“;对象函数内部的引用
- "对象没有't支持这种性质或方法“;在IE 8中.在调试中执行精细
- "Function.createDelegate"原因;错误:对象没有't支持属性或方法
- 在javascript中,使用requireJS,我如何"要求“;typescript对象
- a href="上的javascript对象对象;javascript:"呼叫
- TypeError:undefined不是一个对象(正在评估'msg.innerHTML="Uploa
- "[对象对象]”;类型为String