我对作为类的函数中的return语句感到困惑。请参阅以下示例代码:
<html>
<body>
<script type="text/javascript">
function test() {
this.abc = 'def';
return 3;
}
var mytest = new test();
document.write(mytest + ', ' + (typeof mytest) + ', ' + mytest.abc);
</script>
</body>
</html>
代码输出:[object Object],object,def。
这是我的问题。我在test()函数中写了'return 3'。调用'new test()'时是否忽略此语句?
感谢。
答案 0 :(得分:3)
您可以结帐following article。
答案 1 :(得分:3)
当您使用new
调用函数时,您将其作为构造函数调用,该构造函数会自动返回它构造的新对象。
您的return 3;
语句将被忽略。返回的是有效的:
{ abc:'def' }
...带有对prototype
对象的隐式引用,在您的示例中没有任何可枚举的属性,因为您没有给它任何。
如果你这样做了:
mytest instanceof test;
...它会评估为true
。
如果你这样做了:
function test() {
this.abc = 'def';
}
test.prototype.ghi = 'jkl';
var mytest = new test();
......你可以这样做:
mytest.ghi;
...这会给你价值'jkl'
。
答案 2 :(得分:0)
new
运算符实例化并返回<em>对象。以下是其输出的一些示例:
(...)
var mytest = test();
document.write(mytest + ', ' + (typeof mytest) + ', ' + mytest.abc);
// 3, number, undefined
或者:
function test() {
this.abc = 'def';
this.getvalue = function(){
return 3;
}
}
var mytest = new test();
document.write(mytest.getvalue() + ', ' + (typeof mytest) + ', ' + mytest.abc);
// 3, object, def
答案 3 :(得分:0)
当您使用new
运算符时,您将该函数用作构造函数,在这种情况下为返回值:
new
表达式的结果所以,如果你要写
Test = function(arg) {
this.a = 1;
return arg;
}
var t1 = new Test(10);
var t2 = new Test({b: 2});
console.log(t1, t2)
// output:
// Test {a:1} Object {b: 2}
答案 4 :(得分:0)
你可以做到
function test(){
this.abc = "def"
this.ghi = function(){
return "jkl"
}
}
或
function test(){
this.Class = function(){
this.def = "abc"
this.jkl = "ghi"
}
this.abc = "def"
this.ghi = function(){
return "jkl"
}
}