函数中的return语句作为类

时间:2011-01-22 19:32:04

标签: javascript

我对作为类的函数中的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()'时是否忽略此语句?

感谢。

5 个答案:

答案 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"
}
}