安全模式:避免类在调用时出错;
创建一个类
function Book (title, time, type) {
// 公有属性和方法
this.title = title;
this.time = time;
this.type = type;
}实例化一个类
let book = Book('JavaScript进击之路', '2019', 'js');
book; // undefined上面的类式调用是有问题的,因为没有使用new关键字,因为没有进行正确的类实例化,只是进行了简单的函数调用其函数内部没有返回值,所以输出为:undefined;
console.log(window.title); // 'JavaScript进击之路'
console.log(window.time); // '2019'
console.log(windwo.type); // 'js'因为忘记使用new关键字来实例化对象,只是进行简单的函数调用,this默认指向全局变量window;
使用“安全”模式避免出错
function Book (title, time, type) {
// 判断当前构造函数的prototype(原型对象)是否出现在当前this对象的原型链中的任何位置;
// instanceof可以用来检测某个对象是否是某个类的实例
if (this instanceof Book) {
this.title = title;
this.time = time;
this.type = type;
} else {
// 否则重新创建这个对象
return new Book(title, time, type);
}
}
var book = Book('JavaScript进击之路', '2019', 'js');
console.log(book.title); // 'JavaScript进击之路'
console.log(book.time); // '2019'
console.log(book.type); // 'js'现在可以愉快的实例化类了,再也不用担心没有写new关键字了!