当前第2页 返回上一页
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | var obj = new Object(5);
obj.toFixed(2);
var num = 5;
num.toFixed(2);
var obj = new String( "text" );
obj.slice(0,2);
var string = "text" ;
string.slice(0,2);
|
使用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);
|
上面的代码运行结果如下所示:

如果是在严格模式下,上面的代码将会抛出错误,因为严格模式不允许我们不使用new关键字调用构造器。
适用范围更高的构造器
为了解决可能会忘记使用new关键字的风险,我们可以通过判断this的值创建适用范围更高的构造器。
1 2 3 4 5 6 | function Book(name) {
if (!( this instanceof Book)) {
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);
console.log(person2 instanceof Book);
|
很多内建的构造器都是这么做的。通过判断this
是否为当前类型。如果程序员忘记加new
关键字,那么我们就返回一个通过new
出来的对象。
结论
JavaScript没有类这种说法(但是它可以使面向对象的),所以对于习惯了使用类的程序员来说是种困惑。当然JavaScript的构造函数跟普通函数没什么区别,只是通过new
关键字生成出来而已。如果我们需要”印饼干”的话,它就非常有用了。
推荐教程:《JavaScript视频教程》
以上就是详细了解JavaScript中的构造器的详细内容,更多文章请关注木庄网络博客!
返回前面的内容
相关阅读 >>
如何解决javascript get 乱码问题
javascript可以获取input的值吗
javascript怎么判断正数还是负数
javascript中创建对象的7种经典方式(总结)
javascript中怎么退出循环
javascript有数据类型么
window.open()弹窗被浏览器拦截的解决方法
前端工程师需要掌握哪些知识?
javascript字符串方法有哪些?
javascript开发中常用的方法集
更多相关阅读请进入《javascript》频道 >>
人民邮电出版社
本书对 Vue.js 3 技术细节的分析非常可靠,对于需要深入理解 Vue.js 3 的用户会有很大的帮助。——尤雨溪,Vue.js作者
转载请注明出处:木庄网络博客 » 详细了解JavaScript中的构造器