详细了解JavaScript中的构造器


当前第2页 返回上一页

1

2

3

4

5

6

7

8

9

10

11

12

13

14

// a number object

// numbers have a toFixed() method

var obj = new Object(5);

obj.toFixed(2);     // => 5.00

// we can achieve the same result using literals

var num = 5;

num.toFixed(2);     // => 5.00

// a string object

// strings have a slice() method

var obj = new String("text");

obj.slice(0,2);     // => "te"

// same as above

var string = "text";

string.slice(0,2);  // => "te"

使用new关键字是必不可少的

记得使用构造器的时候要用new关键字,如果你不小心忘记了,那么构造器中的this指向的是global对象(浏览器中默认为window)。

1

2

3

4

5

6

7

8

9

10

11

function Book(name, year) {

    console.log(this);

    this.name = name;

    this.year = year;

}

var myBook = Book("js book", 2014); 

console.log(myBook instanceof Book); 

console.log(window.name, window.year);

var myBook = new Book("js book", 2014); 

console.log(myBook instanceof Book); 

console.log(myBook.name, myBook.year);

上面的代码运行结果如下所示:

2.png

如果是在严格模式下,上面的代码将会抛出错误,因为严格模式不允许我们不使用new关键字调用构造器。

适用范围更高的构造器

为了解决可能会忘记使用new关键字的风险,我们可以通过判断this的值创建适用范围更高的构造器。

1

2

3

4

5

6

function Book(name) {

    if (!(this instanceof Book)) {

        // the constructor was called without "new".

        return new Book(name);

    }

}

加上这段代码之后,我们就可以‘肆无忌惮’地使用构造器了。

1

2

3

4

5

6

7

8

9

10

11

function Book(name, year) {

    if (!(this instanceof Book)) {

        return new Book(name, year);

    }

    this.name = name;

    this.year = year;

}

var person1 = new Book("js book", 2014);

var person2 = Book("js book", 2014);

console.log(person1 instanceof Book);    // => true

console.log(person2 instanceof Book);    // => true

很多内建的构造器都是这么做的。通过判断this是否为当前类型。如果程序员忘记加new关键字,那么我们就返回一个通过new出来的对象。

结论

JavaScript没有类这种说法(但是它可以使面向对象的),所以对于习惯了使用类的程序员来说是种困惑。当然JavaScript的构造函数跟普通函数没什么区别,只是通过new关键字生成出来而已。如果我们需要”印饼干”的话,它就非常有用了。

推荐教程:《JavaScript视频教程》

以上就是详细了解JavaScript中的构造器的详细内容,更多文章请关注木庄网络博客

返回前面的内容

相关阅读 >>

如何解决javascript get 乱码问题

javascript可以获取input的值吗

javascript怎么判断正数还是负数

javascript中创建对象的7种经典方式(总结)

javascript中怎么退出循环

javascript有数据类型么

window.open()弹窗被浏览器拦截的解决方法

前端工程师需要掌握哪些知识?

javascript字符串方法有哪些?

javascript开发中常用的方法集

更多相关阅读请进入《javascript》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...