我有一个像这样的JavaScript构造函数:
function Box(obj) {
this.obj = obj;
}
Run Code Online (Sandbox Code Playgroud)
我想传递一个对象作为这样的参数:
var box = new Box({prop1: "a", prop2: "b", prop3: "c"})
Run Code Online (Sandbox Code Playgroud)
并给我这样的东西:
box.obj.prop1
box.obj.prop2
box.obj.prop3
Run Code Online (Sandbox Code Playgroud)
但我希望这些属性直接在对象上,如下所示:
box.prop1
box.prop2
box.prop3
Run Code Online (Sandbox Code Playgroud)
我知道我可以这样做:
function Box(obj) {
this.prop1 = obj.prop1;
this.prop2 = obj.prop2;
this.prop3 = obj.prop3;
}
Run Code Online (Sandbox Code Playgroud)
但这并不好,因为那时我的构造函数必须在对象参数的属性名称之前"知道".我想要的是能够将不同的对象作为参数传递,并将它们的属性直接指定为构造函数创建的新自定义对象的属性,所以我得到box.propX和不得box.obj.propX.希望我自己清楚,也许我正在测量一些非常明显的东西,但我是新手,所以请你需要帮助!
提前致谢.
我有这个函数来根据属性对JavaScript对象数组进行排序:
// arr is the array of objects, prop is the property to sort by
var sort = function (prop, arr) {
arr.sort(function (a, b) {
if (a[prop] < b[prop]) {
return -1;
} else if (a[prop] > b[prop]) {
return 1;
} else {
return 0;
}
});
};
Run Code Online (Sandbox Code Playgroud)
它适用于这样的数组:
sort('property', [
{property:'1'},
{property:'3'},
{property:'2'},
{property:'4'},
]);
Run Code Online (Sandbox Code Playgroud)
但是我希望能够通过嵌套属性进行排序,例如:
sort('nestedobj.property', [
{nestedobj:{property:'1'}},
{nestedobj:{property:'3'}},
{nestedobj:{property:'2'}},
{nestedobj:{property:'4'}}
]);
Run Code Online (Sandbox Code Playgroud)
然而,这不起作用,因为它不可能做类似的事情object['nestedobj.property'],它应该是object['nestedobj']['property'].
你知道我怎么能解决这个问题并使我的函数与嵌套对象的属性一起工作?
提前致谢
我需要使用PHP 将CSV文件转换为服务器上的JSON.我正在使用这个有效的脚本:
function csvToJSON($csv) {
$rows = explode("\n", $csv);
$i = 0;
$len = count($rows);
$json = "{\n" . ' "data" : [';
foreach ($rows as $row) {
$cols = explode(',', $row);
$json .= "\n {\n";
$json .= ' "var0" : "' . $cols[0] . "\",\n";
$json .= ' "var1" : "' . $cols[1] . "\",\n";
$json .= ' "var2" : "' . $cols[2] . "\",\n";
$json .= ' "var3" : "' . $cols[3] . "\",\n"; …Run Code Online (Sandbox Code Playgroud) 我有一个像这样的JavaScript对象数组:
box[0] = {...}
box[1] = {...}
box[2] = {...}
...
box[499] = {...}
Run Code Online (Sandbox Code Playgroud)
此对象由相同的构造函数生成,并添加到循环内的数组中.对象在原型中有方法,需要知道数组中对象的索引才能完成它们的工作.目前我正在做的是id在循环中创建一个在每个对象内部调用的属性,等于数组索引.像这样的东西:
box[i].id = i;
Run Code Online (Sandbox Code Playgroud)
但是我对此并不完全满意,因为每次使用I重新排序数组时,sort()我必须运行循环以id使用新的索引值更新属性.
我的问题是,如果有一种方法可以在对象内部知道它在数组中的索引,而不必设置id属性,希望你能帮助我.
提前致谢.
在JavaScript中是否有一种方法可以像监听变量中的变化的事件一样?所以当它的值被修改时,事件触发,然后我可以调用一个函数.为了将更多内容放到上下文中,我有一个处理对象数组的html呈现的函数,我希望每次修改数组时都会自动调用该函数.
谢谢.
看一些JavaScript库和其他人的代码,我看到了两种常见的模式,我不知道使用其中一种是否存在差异或优势.模式看起来像这样:
1.
var app = (function () {
// Private vars
// Module
var obj = {
prop: "",
method: function () {}
};
return obj;
})();
Run Code Online (Sandbox Code Playgroud)
2.
(function () {
// Private vars
// Module
var obj = {
prop: "",
method: function () {}
};
window.app = obj;
})();
Run Code Online (Sandbox Code Playgroud)
这些模式是相同的还是其中一个比另一个具有优势或用途?
提前致谢.
有人给了我这个代码很好的代码.但我真的很想了解其中发生的事情.有人可以解释一下吗?代码的每个部分的含义是什么?代码位于自定义控件内,该控件在面板内有两个标签.
此外,我已经看到一些使用添加/删除语法的自定义控件事件,这是为了什么?与这里发生的事情有什么不同?
public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
}
public event EventHandler MyCustomClickEvent;
protected virtual void OnMyCustomClickEvent(EventArgs e)
{
// Here, you use the "this" so it's your own control. You can also
// customize the EventArgs to pass something you'd like.
if (MyCustomClickEvent != null)
MyCustomClickEvent(this, e);
}
private void label1_Click(object sender, EventArgs e)
{
OnMyCustomClickEvent(EventArgs.Empty);
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个像这样的XML文件:
<content>
<box>
<var1>A1</var1>
<var2>B1</var2>
<var3>C1</var3>
<var4>D1</var4>
</box>
<box>
<var1>A2</var1>
<var2>B2</var2>
<var3>C2</var3>
<var4>D2</var4>
</box>
<box>
<var1>A3</var1>
<var2>B3</var2>
<var3>C3</var3>
<var4>D3</var4>
</box>
</content>
Run Code Online (Sandbox Code Playgroud)
它有500个box元素,我需要解析为JavaScript对象.我正在使用这个代码工作正常,但我是一个新手,也许我错过了一些东西,如果有更好/更快的方法,我想得到建议:
var app = {
//...
box: [],
init: function (file) {
var that = this;
$.ajax({
type: "GET",
url: file,
dataType: "xml",
success: function (xml) {
$("box", xml).each(function (i) {
var e = $(this);
that.box[i] = new Box(i, {
var1: e.children("var1").text(),
var2: e.children("var2").text(),
var3: e.children("var3").text(),
var4: e.children("var4").text()
});
});
}
});
},
//...
};
Run Code Online (Sandbox Code Playgroud)
提前致谢.
我是JavaScript和编程的新手.我已经开始创建我的第一个Web应用程序,我想使用面向对象的方法重写它.我已经阅读了一些关于面向对象JS的文章和书籍章节,关于如何模拟命名空间,模块模式等等,但是我很难思考如何在对象内部组织我的代码,希望你可以帮我这个或者指出了一些示例或最佳实践的正确方向.
我想组织它有点像jQuery与命名空间(可能称为app)和我内部的所有app函数,例如app.func1,app.func2,但是我有其他功能,这些功能在公用事业中使用我希望他们有另一个名字,也许像app.util.func ...我的代码也在我的应用程序中创建自定义对象,但我不知道在哪里放置它们和它们的构造函数在我的内部的正确位置命名空间.
有关如何组织面向对象的JavaScript的任何建议,想法,最佳实践,模板或示例?创建类似代码的简单库的示例会很棒.
提前致谢!
我在命名空间中有一个JavaScript数组,如下所示:
app.collec.box = [];
Run Code Online (Sandbox Code Playgroud)
我在同一个命名空间内有一个函数,如下所示:
app.init = function () {
var box = this.collec.box;
// ... code to modify box
};
Run Code Online (Sandbox Code Playgroud)
我认为设置一个局部变量等于一个对象或对象属性只是对原始的一个参考,但似乎我错了,在box我的函数内部更改局部变量的内容后,app.collec.box不会改变.
请帮忙,我做错了什么?我该怎么解决这个问题?
提前致谢.
编辑.这是完整的代码.
var app = {
collec: {
box: [],
cache: []
},
init: function () {
var box = this.collec.box;
$.ajax({
url: 'file.json',
success: function (json) {
// Map JSON array to box array using Underscore.js _()map
box = _(json).map(function (o) {
return new Model(o);
});
}
});
}
};
app.init();
Run Code Online (Sandbox Code Playgroud) 我想创建一个自定义的javascript对象,其中包含从jQuery AJAX请求返回的数据,但我不知道哪种方法是正确的.我想也许有一种方法可以在构造函数中包含AJAX请求,因此对象的创建方式如下:
// Constructor function
function CustomObject(dataUrl) {
var that = this;
$.ajax(dataUrl, {
success: function (json) {
that.data = $.parseJSON(json);
}
});
}
// Creating new custom object
var myObject = new CustomObject('http://.....');
Run Code Online (Sandbox Code Playgroud)
另一种方法可能是使用一个执行AJAX的函数,然后根据AJAX响应中的数据返回新对象.
function customObject(dataUrl) {
// Constructor function
function CustomObject(data) {
this.data = data;
}
$.ajax(dataUrl, {
success: function (json) {
var data = $.parseJSON(json);
return new CustomObject(data);
}
});
}
// Creating new custom object
var myObject = customObject('http://.....')
Run Code Online (Sandbox Code Playgroud)
我想知道在做这样的事情时最好的做法是什么,以及不同方法的优点/缺点.也许你可以指点我的一些文章或例子,类似于我想要做的事情.
提前致谢.
我需要帮助,我想创建一个从AJAX请求返回一个对象的函数,所以我可以从服务器上的数据创建一个新对象,如下所示:
var foo = bar('api.php?x=y');
Run Code Online (Sandbox Code Playgroud)
该函数应该将查询字符串作为参数,服务器将数据作为JSON返回.
你能告诉我如何使用jQuery做这个,你有什么想法/例子吗?
我会扩展我的问题,因为我觉得我做错了.我正在尝试基于实时数据(股票报价)创建Web应用程序,因此它必须不断地从服务器请求更新的信息.当应用程序初始化时,第一步是从要包含的股票中获取静态数据(例如股票代码和发行人),我认为最好的方法是在服务器上安装一个数据库,并使用一个API来执行查询并将选定的库存数据作为JSON返回.下一步是向服务器上的另一个API发出请求,该请求返回所选股票的实时数据(例如价格和交易量),当返回完整数据时,使用模板引擎将其呈现为html.然后,应用程序必须在某个时间间隔内不断调用第二个API以更新实时数据并再次渲染.此外,您应该能够选择新的股票并重新开始流程.
我认为构建这样的应用程序的最佳方法是将数据放在一个自定义对象中,该对象有自己的方法以便稍后修改数据(例如排序和过滤),所以如果foo我的对象有库存数据我可以做类似的东西foo.sort(),或者类似于foo.render()创建数据的html表示的东西.这就是为什么我认为最好的方法是从AJAX调用返回的数据创建一个对象.你能否告诉我这是否是构建这样的应用程序的正确方法,还是指向正确的方向?
谢谢