作者sppmg (sppmg)
看板Web_Design
标题[问题] js 中「巢状物件」的建立
时间Sun Sep 17 21:56:30 2017
一个新手问题:
由於我要纪录某几段资料的 max, min ,而这两个又要纪录各自的 index, value
所以我想利用物件精简程式码
其基础想法大概是这样:
// ------------------
var iv = { i=0, v=[] } ;
var mm = {max=iv, min=iv} ;
var data1 = mm ;
var data2 = mm ;
// ------------------
不过这想法我知道是不行的.....
其中一个问题是资料空间(是称为「实例」?)为同一个。
下面是我测试可行的程式:
// ------------------
var iv = function () {
this.i = 1;
this.v = [];
};
var mm = function () {
this.min = new iv() ;
this.max = new iv() ;
};
var data1 = new mm();
var data2 = new mm();
// ------------------
请问有没有办法更简单呢?
毕竟我不需要建构式进行初始化运算,仅仅赋值而已。
我看到有 Object.create() ,似乎可以直接产生新实例,但没试成功。
不知哪里有误?(程式如下)
// ------------------
var iv = {i: 1 , v: []};
var mm = {max: Object.create(iv), min:Object.create(iv)};
var data1 = Object.create(mm)
var data2 = Object.create(mm)
// ------------------
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.162.137.26
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Web_Design/M.1505656595.A.106.html
※ 编辑: sppmg (1.162.137.26), 09/17/2017 21:59:11
1F:推 shter: max: JSON.parse(JSON.stringify(iv)) 如果物件只有资料 09/18 00:06
原来是透过 JSON 字串转换完成。不过有点绕路的感觉。
这方法不错,但直接回传一个做好的完整物件.... 有点作弊的感觉 XD
我是说不够动态啦!
想说如果要以後如果遇到要重复利用的情况,这样好像不太好。
感谢各位的解答,虽然还是想知道直接从物件建立的方法。
※ 编辑: sppmg (1.162.137.26), 09/18/2017 10:22:20
3F:推 Kenqr: Object.assign,但只有浅层复制,旧浏览器也不支援 09/18 11:17
4F:→ Kenqr: 总之没有内建,只能从这几种里面选一个了 09/18 11:23
5F:→ Kenqr: 不然就是用jQuery的extend 09/18 11:23
哦!这好。(我可以贴上来当纪录吗?)
我当初其实有试过箭头函数取代 function。但当时用错 () => {{...}}
还觉得奇怪。
谢谢各位了。
※ 编辑: sppmg (1.162.137.26), 09/18/2017 20:33:00
8F:推 LPH66: 箭头如果是直接得出物件为结果的话要写成 ()=>({...}) 09/19 18:09
9F:→ LPH66: 不然语法上那层大括号会被认为是写叙述的函式本体定义 09/19 18:09
10F:→ LPH66: 或者如果要写详细一点就 ()=>{return {...};} 也是可以 09/19 18:10
11F:→ LPH66: (这个写法的两组 {} 就是不同意思了, 我提的差别就是它们) 09/19 18:10
12F:推 hijkxyzuw: 不太懂你要表达什麽,为什麽大家都看得懂?? 09/27 00:03