JavaScript学习:创建类(安全模式)

477 阅读1分钟

安全模式:避免类在调用时出错;


创建一个类

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关键字了!