开发者

return statement in a function as class

I am confused about the return statement in a function that serves as a class. See the example code below:

<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>

</bod开发者_JAVA百科y>
</html>

The code out put: [object Object], object, def.

Here is my question. I wrote 'return 3' in the test() function. Is this statement ignored when 'new test()' is called?

Thanks.


When you call a function with new, you're invoking it as a constructor which automatically returns the new object it constructs.

Your return 3; statement is ignored. What is returned is effectively:

{ abc:'def' }

...with an implicit reference to a prototype object, which in your example doesn't have any enumerable properties because you haven't given it any.

If you did:

mytest instanceof test;

...it would evaluate to true.

If you did:

function test() {
    this.abc = 'def';
}
test.prototype.ghi = 'jkl';

var mytest = new test(); 

...you could then do:

mytest.ghi;

...which would give you the value 'jkl'.


When you use the new operator, you're using the function as a constructor, in that case for the return value:

  • if it's not an object, it is ignored (like in your example)
  • if it is an object, the object returned becomes the result of the whole new expression

So if you were to write

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}


The new operator instantiates and returns an object. Here are some examples with its output:

(...)
var mytest = test();
document.write(mytest + ', ' + (typeof mytest) + ', ' + mytest.abc); 
// 3, number, undefined

Or:

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


you can do

function test(){
this.abc = "def"
this.ghi = function(){
return "jkl"
}
}

or

function test(){
this.Class = function(){
this.def = "abc"
this.jkl = "ghi"
}
this.abc = "def"
this.ghi = function(){
return "jkl"
}
}

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜