我最近几个月一直在学习JavaScript,有时候感觉自己写代码比理解语言的细节更快,所以请您见谅。
无论如何,我的问题与我一直在使用的某种方法的行为有关。基本的要点是能够设计出可以构建和使用对象而不使用“new”关键字。
以下是一个例子:
<!DOCTYPE html>
<html>
<head>
<script>
function example()
{
if(!(this instanceof example))
return new example();
}
example.prototype.test = function()
{
var
result = example();
if(result instanceof example)
{
console.log("Type: example");
if(result === this)
console.log("Unexpected: (result === this)");
else
console.log("Expected: (result !== this)");
}
else
console.log("Type: ?");
return result;
}
function run()
{
var
one = new example(),
two = example(),
three = one.test(),
four = two.test();
three.test();
four.test();
}
</script>
</head>
<body onload = "run()">
</body>
</html>
我得到的输出是:
Type: example
Expected: (result !== this)
Type: example
Expected: (result !== this)
Type: example
Expected: (result !== this)
Type: example
Expected: (result !== this)
这正是我想要看到的。我的问题具体来说是:它是否:
(1) 标准行为
(2) 所有浏览器都支持
(3) 倾向于任何不良副作用
new
关键字? - BarmarjQuery = function(selector, context) { return new jQuery.fn.init( selector, context ); }
- Barmarnew
,只是在隐藏它。一个行为是否“标准”是基于个人观点的,因为有些人喜欢经典的面向对象编程方式,使用new
创建对象,而另一些人则更喜欢函数式编程风格。 - Heretic Monkey