首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JS -属性名称访问

JS -属性名称访问
EN

Stack Overflow用户
提问于 2014-01-26 05:13:05
回答 2查看 103关注 0票数 1

我之前发布了这个问题的一个版本(JS -构造器引用),并在副本中找到了答案,特别是Access / process (嵌套)对象、数组或JSON。从现在开始,我还有一段可笑的时间让这一切按计划进行。

给出以下示例代码:

代码语言:javascript
运行
复制
    function f1(args) {
        this.defaults = {
            param1 : 100,
            param2 : 900;
        }
        this.ranges = {
            param1 : { min : 0, max : 500 },
            param2 : { min : 0, max : 1000 };
        }
        this.steps = {
            param1 : 50,
            param2 : 100;
        }
    var myF1 = new f1();

我已经阅读了以前的副本,并通过以下方法学习了如何访问未知的属性名称:

代码语言:javascript
运行
复制
    for (var propertyName in myF) {
        newName = propertyName;
    }

我需要做的是循环函数(或任何函数),并为函数构建HTML5范围输入(请记住,参数名称将有很大的不同或随机,因此我假设需要为密钥本身循环。因此,在f1/myF1的情况下,生成的HTML5是:

代码语言:javascript
运行
复制
    param1: <input type="range" name="param1" min="0" max="500" steps="50" />
    param2: <input type="range" name="param2" min="0" max="1000" steps="100" />

注意: range=、name=、min=、max=和step=的值都是从函数的属性动态生成的。

我试过用循环键,要求值,以及我能做的任何其他研究和尝试,但我总是用变量覆盖自己,我猜这是远远超出了这位业余游泳者所能找到的。

同时,要意识到每个参数都有一个defaultsrangessteps,所以我们不需要担心那种程度的随机化或变化。谢谢你,所以-JS大师!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-26 06:07:05

看起来,您更愿意迭代myF1.defaultsmyF1.rangesmyF1.steps的属性,而不是myF1本身的属性(因为它们是固定的)。

我不知道您尝试过什么,但是您可以这样创建所需的DOM元素:

代码语言:javascript
运行
复制
var myF1 = new f1();
var elements = [];

for (var param in myF1.ranges) {
    var input = document.createElement('input');
    input.type = 'range';
    input.name = param;
    input.min = myF1.ranges[param].min;
    input.max = myF1.ranges[param].max;
    input.step = myF1.steps[param];
    input.value = myF1.defaults[param];

    var span = document.createElement('span');
    span.appendChild(document.createTextNode(param + ': '));
    span.appendChild(input);
    elements.push(span);
}

只需迭代ranges的属性,并访问stepsdefaults的相同属性。然后你可以用elements做你想做的任何事情。演示

票数 1
EN

Stack Overflow用户

发布于 2014-01-26 06:05:35

首先,您的示例中有两个错误。

  1. function f1(args) {的开始托架没有关闭。
  2. this.defaultsthis.steps中最后一个条目的分号不应该在那里。

下面的代码应该(依赖于jQuery $)创建两个类型范围的正确工作的输入元素,尽管代码强烈依赖于给定的数据格式。One输入元素通过循环myF1.steps属性获得值,每个名称都在defaultsranges上试用。助手函数applyAttr通过另一个propertyName或直接值安全地访问这些值。

工作柱塞

代码语言:javascript
运行
复制
$(document).ready(function() {

  function f1(args) {
    this.defaults = {
        param1 : 100,
        param2 : 900
    }
    this.ranges = {
        param1 : { min : 0, max : 500 },
        param2 : { min : 0, max : 1000 }
    }
    this.steps = {
        param1 : 50,
        param2 : 100
    }
  }
  var myF1 = new f1();

  function applyAttr(inElem, data, propName) {
    if(data.hasOwnProperty(propName))
      inElem.prop(propName, data[propName]);
    else {
      inElem.prop(propName, data);
    }
  }

  for(var stepsProp in myF1.steps) {
    var inputElem = $('<input type="range"/>');
    inputElem.prop('step', myF1.steps[stepsProp]);
    if(myF1.defaults.hasOwnProperty(stepsProp)) {
      inputElem.prop('value', myF1.defaults[stepsProp]);
    }
    if(myF1.ranges.hasOwnProperty(stepsProp)) {
      applyAttr(inputElem, myF1.ranges[stepsProp], 'min');
      applyAttr(inputElem, myF1.ranges[stepsProp], 'max');
    }
    $('body').append(inputElem);
  }
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21359995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档