javascript设计模式之解释器模式详解(11)

for (var i = 0, len = tokenizer.length; i < len; i++) {
                    onePath = tokenizer[i];

if (tokenizer[i + 1]) {
                        // 还有下一个值,说明这不是最后一个元素
                        // 按照现在的语法,属性必然在最后,因此也不是属性
                        setParsePath(false, onePath, false, mapPath);
                    } else {
                        // 说明到最后了
                        dotIndex = onePath.indexOf(DOT);

if (dotIndex >= 0) {
                            // 说明是要获取属性的值,那就按照“.”来分割
                            // 前面的就是元素名称,后面的是属性的名字
                            eleName = onePath.substring(0, dotIndex);
                            propName = onePath.substring(dotIndex + 1);

// 设置属性前面的那个元素,自然不是最后一个,也不是属性
                            setParsePath(false, eleName, false, mapPath);
                            // 设置属性,按照现在的语法定义,属性只能是最后一个
                            setParsePath(true, propName, true, mapPath);
                        } else {
                            // 说明是取元素的值,而且是最后一个元素的值
                            setParsePath(true, onePath, false, mapPath);
                        }

break;
                    }
                }

return mapPath;
            }

/**
             * 按照分解出来的位置和名称来设置需要解析的元素名称
             * @param {Boolean} end           [是否最后一个]
             * @param {String} ele           [元素名称]
             * @param {Boolean} propertyValue [是否取属性]
             * @param {Object} mapPath       [设置需要解析的元素名称,还有该元素对应的解析模型的表]
             */
            function setParsePath(end, ele, propertyValue, mapPath) {
                var pm = new ParserModel();
                pm.setEnd(end);
                // 如果带有“$”符号就说明不是一个值
                pm.setSingleValue(!(ele.indexOf(DOLLAR) >= 0));
                pm.setPropertyValue(propertyValue);
                // 去掉"$"
                ele = ele.replace(DOLLAR, '');
                mapPath[ele] = pm;
                listEle.push(ele);
            }

// 开始实现第二步-------------------------------------

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wgpjfd.html