OOP使用来自闭包内部的新数据设置传入变量
OOP set a passed-in variable with new data from inside closure?
使用OOP时,您可以传递链接到对象/闭包外部的var的选项,但可以在对象/闭包内部设置?
var Object = function (element, options) {
this.$element = $(element);
this.options = {
// option1
place: {},
};
// option2
this.place;
this.init();
};
Object.prototype = {
set: function(newPlace){
// option1
this.options.place = newPlace;
//option 2
this.place = newPlace;
}
}
$.fn.object = function (option) {
if(option instanceof Object) {
this._object = new Object(this, option);
return this;
}else if(option instanceof String){
switch (option) {
// option2
case 'place': return this._object.place;
break;
default: return this;
}
}
};
$.fn.object.Constructor = Object;
--------进球-----------
var newPlace = null;
var newObject = new Object({ place : newPlace }); // or $('#').object({ place: newPlace });
newObject.set('test');
newPlace === 'test'; // <-- object should be able to set the value of external var.
我已经尝试了这两种方法,但都不返回闭包/对象内的新数据集。
我在上面把它们分别标记为option1和option2。
基本上,正如你所期望的var只是被覆盖,我也试着玩call/apply.
所以事实证明我可能一直在尝试做一些不正确的事情。
最好的方法和解决方案是在选项中传入一个函数回调来更新本地变量。
ExampleObject = function(options){
options = {
update: function(){}
}
}
ExampleObject.prototype = {
set: function(newPlace){
this.options.update(newPlace);
}
}
newObject = ExampleObject({ update: function(r){ newPlace = r; } });
正常运行:
var obj = function (element, options) {
this.$element = $(element);
this.options = {
// option1
place: {},
};
// option2
this.place;
//this.init();
};
obj.prototype = {
set: function(newPlace){
// option1
this.options.place = newPlace;
//option 2
this.place = newPlace;
}
}
var o = new obj();
console.log(o.options.place);
o.set('foo');
console.log(o.options.place);
或者如果你不需要多个实例:
var o = {
options: {
place: {}
},
setPlace: function(place){
this.options.place = place;
}
};
console.log(o.options.place);
o.setPlace('foo');
console.log(o.options.place);
function obj(o){
this.o = o;
}
obj.prototype.set = function(newValue){
this.o = newValue;
};
var o = new obj({t : 't'});
console.log(o.o);
o.set({ t2: 't2' });
console.log(o.o);
相关文章:
- 使用c#将用户数据设置为HTML标记
- 将图像数据设置为输入文件标记
- 基于会话的服务器端数据设置和检索
- 我们如何使用Jquery和ASP.NET MVC 4复杂模型数据设置HTML元素的值
- 使用Javascript$ajax发布数据(设置)
- 是否可以使用图像数据设置画架命中区域
- 从 html 数据设置 jquery 延迟
- 如何在加载 CKEDITOR 后将数据设置为 CKEDITOR
- 如何将来自服务器的数据设置为此动态形式
- 融合表 最大查询数 将数据设置为 0 IF 不返回任何行
- 使用AngularJS中pouchDB的数据设置$scope变量的值
- 如何在Angular.js中为我的Json数据设置初始过滤器
- AngularJS从服务器加载数据(设置)
- 如何在使用Ember和Ember数据设置模型属性之前编辑表单数据
- 我可以在Ajax中为返回数据设置class或Id属性吗
- 如何将数据设置为新元素
- 在没有Ajax的情况下将数据设置到Kendo DataSource中
- highchart将数据设置为xrange图表中的系列
- 使用React中的循环从JSON数组中获取数据并根据数据设置状态
- 分析,按ObjectID将数据设置为用户