NodeJs基本语法和类型

2020-06-17 05:41:04易采站长站整理

}

注意:只有在加了 this 的时候才是调用类的成员变量,否则只是函数内的一个局部变量而已。要分清楚有没有 this 的时候变量的作用范围。

第二种方法就是在构造函数或者任何成员函数外部声明,其格式是 <类名>.prototype.<变量名>:

javascript


function foo() {
    //…
}
foo.prototype.hello = “world”;

无论上面哪种方法都是对成员变量的声明,我们可以看看效果:

javascript


var bar = new foo();
console.log(bar.hello);

甚至你可以这么修改这个类:

javascript


function foo() {
    this.hello = “world”;
}
foo.prototype.hello = “蛋花汤”;

然后再用上面的代码输出。

想想看为什么输出的还是 world 而不是 蛋花汤。

构造函数

我们之前说过了这个 foo() 实际上是一个 构造函数。那么显然我们可以给构造函数传参数,所以就有了下面的代码:

javascript


// 代码2.1
function foo(hello) {
    if(hello === undefined) {
        this.hello = “world”;
    } else {
        this.hello = hello;
    }
}

我们看到上面有一个奇葩的判断 if(hello === undefined),这个判断有什么用呢?第一种可能,就是开发者很蛋疼地特意传进去一个 undefined 进去,这个时候它是 undefined 无可厚非。

还有一种情况。我们一开始就说了 JavaScript 是一门弱类型语言,其实不仅仅是弱类型,它的传参数也非常不严谨。你可以多传或者少传(只要保证你多传或者少传的时候可以保证程序不出错,或者逻辑不出错),原则上都是可以的。多传的参数会被自动忽略,而少传的参数会以 undefined 补足。

看看下面的代码就明白了:

javascript


// 上接代码2.1
var bar1 = new foo();
var bar2 = new foo(“蛋花汤”);

请自行输出一下两个 bar 的 hello 变量,会发现一个是 world 一个是 蛋花汤。显而易见,我们的第一个 bar1 在声明的时候,被 Node.js 自动看成了:

javascript


var bar1 = new foo(undefined);

所以就有了它是 world 一说。

还有就是在这个构造函数中,我们看到了传进去的参数是 hello 而这个类中本来就有个成员变量就是 this.hello。不过我们之前说过了有 this 和没 this 的时候作用域不同,那个参数只是作用于构造函数中,而加了 this 的那个则是成员变量。用一个 this 就马上区分开来他们了,所以即使同名也没关系。

成员函数