我拾取了一些代码,现在才开始理解new Function();
。通过jslint检查时,new Function();
被标记为意外的。我开始进行以下实验。
var func = new Function();
func.property = "some property";
return func;
替换。
var func = new function(){
this.property = "some property";
}
return func;
两者都可以工作,但第二种方法被js-lint忽略。
我是否在这里做了什么特别的事情,还是完全相同?像这样使用new Function();
在语法上是否正确?
附上原始代码摘录。
var $ = (function() {
function doCSS(prop, val) {
var isSet = Boolean(val),
action = CSSStyleDeclaration.prototype.setProperty,
args = arguments;
if (isSet) {
this.each(function(node, i) {
action.apply(node.style, args);
});
return this;
} else if (typeof(prop) === 'object') {
this.each(function(node, i) {
Object.keys(prop).forEach(function(property) {
node.style[property] = prop[property];
});
});
return this;
} else {
return this.nodes[0].style[prop];
}
}
// chaining of methods
return (function(selector, context) {
var q = new Function();
q.selector = selector;
q.context = context || document;
q.nodeList = q.context.querySelectorAll(selector);
q.each = function(action) {
[].forEach.call(q.nodeList, function(item, i) {
action(item, i);
});
return this;
};
q.click = function(action) {
[].forEach.call(q.nodeList, function(item, i) {
item.addEventListener("click", action, false);
});
return this;
};
q.toString = function() {
return q.selector;
};
q.css = function(prop, val) {
return doCSS.call(this, prop, val);
};
return q;
});
})
这两个代码语法有误吗?
编辑 在获得一些很好的建议后,我将代码改为以下形式:
请注意,以上内容保留了HTML标签。
var $ = (function($) {
function doCSS(prop, val) {
var isSet = Boolean(val),
action = CSSStyleDeclaration.prototype.setProperty,
args = arguments;
if (isSet) {
this.each(function(node, i) {
action.apply(node.style, args);
});
return this;
} else if (typeof(prop) === 'object') {
this.each(function(node, i) {
Object.keys(prop).forEach(function(property) {
node.style[property] = prop[property];
});
});
return this;
} else {
return this.nodes[0].style[prop];
}
}
// chaining of methods
return (function(selector, context) {
var element = context || document;
var q = {
selector: selector,
nodeList: element.querySelectorAll(selector),
each: function(action) {
[].forEach.call(this.nodeList, function(item, i) {
action(item, i);
});
return this;
},
click: function(action) {
[].forEach.call(this.nodeList, function(item, i) {
item.addEventListener("click", action, false);
});
return this;
},
toString: function() {
return selector;
},
css: function(prop, val) {
return doCSS.call(this, prop, val);
},
}
return q;
});
})($);
$("#myElement").css({
background: "blue",
color: "#fff"
});
<div id="myElement">Say Hi</div>
它工作得非常好,看起来更加清晰。JS Lint对我很友好,我可以解决下一个问题。
Function
而不是对象{}
? - zerkmsvar q = {};
来实现的事情。 - Heretic Monkeytypeof (new Function) === "function"
,typeof (new function(){}) === "object"
。 - chiliNUTnew function
! - Bergifunc
应该是一个函数吗?如果是,当调用时它应该做什么?是的,你真的可能需要在你的原始代码上进行[CodeReview.SE](至少从你展示的摘录来看)。 - Bergi