对象的对象?或者可能是嵌套对象?在 JavaScript 中
objects of objects? or maybe nested objects? in javascript
我希望能够通过调用类似的东西来填充数组。
necessaryLevel('a','b').necessaryLevel2('name',[X,Y,Z])
以下作为可能性,
necessaryLevel('a','b').necessaryLevel2('name',[X,Y,Z]).option(5)
我还需要 .option(( 只能从 essentialLevel2 访问,也就是说,在代码上下文中不应该编写,
necessaryLevel('a','b').option(5)
我对javascript相当陌生,刚刚开始学习对象和继承。嵌套在这里也是正确的术语吗?
任何指针(没有双关语(?
例:
tag('a','nameVal').value('function_name',[funarg1,funarg2])
输出:
['a','nameVal','function_name',[funarg1,funarg2]]
如果添加了 .option,我可能会得到类似的东西
tag('a','nameVal').value('function_name',[funarg1,funarg2]).option(2)
输出:
['a','nameVal','function_name1',[funarg11,funarg21],'function_name2',[funarg12,funarg22]]
编辑:
玩了一下我有这个(未完成(:
function foo(x){
return {
bar:function(y){return [x,y] };
}
}
> foo(9.9).bar('la')
[ 9.9, 'la' ]
我遇到的问题是添加了一个选项函数,以便我可以重复进入 bar(( 的内容,例:
> foo(9.9).bar('la').option(4)
[ 9.9, 'la', 'la', 'la', 'la' ]
并且仍然可以灵活地键入 foo(9.9(.bar('la'(
这里有一些东西可以帮助你开始:
例
var tag = ( function ( hier ) {
var array = [];
var calls = [];
var repeater = function () {
return function ( times ) {
while ( calls.length < times ) {
hier[1].apply( this, calls.slice( -1 )[0] );
}
// for
return array;
};
};
var adder = function ( child_name, child, repeat ) {
return function () {
var args = Array.prototype.slice.call( arguments, 0 );
var orig_args = [].concat( args );
if ( repeat ) {
args[0] += calls.length + 1;
calls.push( orig_args );
}
array = array.concat( args );
var return_val = [].concat( array );
if ( child_name !== undefined ) {
return_val[ child_name ] = child;
}
return return_val;
};
};
var last_child, args;
hier.reverse().forEach( function ( child, index, hier ) {
var method = index ? adder : repeater;
args = last_child || [];
if ( index === 1 ) {
args.push( true );
}
hier[ index ] = method.apply( this, args );
last_child = [ child, hier[ index ] ];
} );
return hier.pop();
} )( [ 'tag', 'value', 'option' ] );
在此版本中,返回数组本身,但是如果您不想覆盖本机属性或Array
方法,则必须小心命名属性(例如 value
,option
(。
JS对象模型
嵌套在这里也是正确的术语吗?
有点。 在JS中,函数是第一类对象,这意味着您可以将它们传递给函数,返回它们,将它们分配给对象的属性等。 您要求有一个函数tag
,该函数返回具有value
属性的对象,这是一个函数,该函数返回具有option
属性的对象,该属性是一个函数。
如果只有嵌套对象,则层次结构将如下所示。 {...}
是用于实例化新的通用对象的对象文字语法,用于代替 JavaScript 中的哈希/映射/字典并且是无序的。
var tag = {
value : {
option : {}
}
};
例如,您可以访问以下option
:
tag.value.option
您要求一个函数层次结构,每个函数返回一个带有函数作为属性的对象。 所以在这种情况下,要到达 option
,您必须这样做:
tag().value().option
在这种情况下,option
是一个函数,而不是一个通用对象。
JS函数表达式
当你用parathes做
var a = (function(heir){...})(['a','b','c'])
时,它叫什么?
它被赋予的一个名称是"立即调用的函数表达式(IIFE("(见下文(。
下面是一个函数表达式。 它创建一个函数对象,您可以将其传递给函数,保存在变量或对象属性中等。
function ( hier ) {...}
您还可以就地执行函数表达式,而无需将其分配给任何内容:
( function ( hier ) {...} )( ['a','b','c'] )
这将执行函数表达式。 当然,如果需要,您可以分配返回值:
var whatever = ( function ( hier ) {...} )( ['a','b','c'] );
函数表达式周围的括号有几个原因。
JavaScript 中的函数语句和函数表达式之间的差异可能很微妙。 若要像这样就地调用函数,它必须是一个表达式,而括号是确保它是表达式的一种方法。 以下是其他示例:
用运算符作为前缀:
+function ( hier ) {...}( ['a','b','c'] )
将其放在作业的右侧:
var whatever = function ( hier ) {...}( ['a','b','c'] );
即使确保它将作为表达式进行计算,如上一个示例所示,有些人认为无论如何使用括号是一个很好的约定,以使函数的返回值而不是函数本身更明显地是表达式的值(在本例中为分配给变量的值(。
关于这个主题有一篇很好的文章:Ben Alman的即时调用函数表达式(IIFE(,他建议用这个名字(IIFE(来称呼这个结构。
- 面向对象JavaScript中的私有函数
- 对象 Javascript 中的标签无效 - 想要添加事件列表器
- 将字符串转换为对象 javascript/jquery
- 正在检查对象javascript中是否存在嵌套属性
- 时间-日期对象JavaScript getUTCMilliseconds
- 仅在对象(javascript)中解析值
- 使用对象(JavaScript或jQuery)填充选择下拉列表
- 引用另一个对象javascript中的对象
- 如何删除列表中的对象?Javascript nodejs和下划线
- 无法从日期对象javascript获取日期和月份
- 如何在if语句中使用对象-Javascript
- 对象javascript错误
- 对象Javascript的少数实例
- 位置对象Javascript
- 将字符串传递到对象javascript中
- 获取对象Javascript或jQuery的最后一个值
- 鼠标接近对象Javascript
- 这个mixins代码是书中的错误吗;面向对象JavaScript的原理”;
- 使用闭包编译器编写更好的面向对象JavaScript完整示例代码
- 访问对象javascript数组中的对象属性值