# 类的声明与实例

# 类的声明方式

# ES5方式,构造函数式

function M() {
    this.name = 'name'
}

# ES6方式,class类

class M2 {
    constructor() {
        this.name = 'name';
    }
}

# 实例化

console.log(new M(), new M2)
// 当不传参数时,()可以省略,无论是构造函数创建还是类创建

# 例题:实现一个Stock类

要求使用ES5语法声明一个Stock类,符合以下定义:

const stock = new Stock('AAPL', '苹果公司');
 
stock instanceof Stock; // true
stock.constructor === Stock; // true
stock.symbol; // 返回初始化时传入的股票代码
stock.getMarket(); // 返回该股票所属市场code;假设已知美股(US)股票代码为2到8位字母,港股(HK)为5位数字,沪深(A)为6位数字
stock.setPrice(192.80); // 设置股票最新价格
点击查看代码
function Stock(symbol, name) {
    this.symbol = symbol;
    this.name = name;
    this.price = undefined;
    this.getMarket = function() {
        var regUS = /^[a-zA-Z]{2,8}$/;
        var regHK = /^\d{5}$/;
        var regA = /^[0-9]{6}$/;
        if (regUS.test(this.symbol)) {
            return '美股US'
        } else if (regHK.test(this.symbol)) {
            return '港股HK'
        } else if (regA.test(this.symbol)) {
            return '沪深A股'
        } else {
            return '未知'
        }
    }
    this.setPrice = function(price) {
        this.price = price;
        console.log(this.price)
    }
}

const stock = new Stock('AAPL', '苹果公司');
 
console.log(stock instanceof Stock);
console.log(stock.__proto__.constructor === Stock);
console.log(stock.constructor === Stock); // 原理同上,都是在原型链中找
console.log(stock.symbol);
console.log(stock.getMarket());
console.log(stock.setPrice(192.80));

WARNING

注意这里不能把getMarket与setPrice方法作为原型链上的方法,重新覆盖原型对象:

Stock.prototype = {
    this.getMarket: function() {
        var regUS = /^[a-zA-Z]{2,8}$/;
        var regHK = /^\d{5}$/;
        var regA = /^[0-9]{6}$/;
        if (regUS.test(this.symbol)) {
            return '美股US'
        } else if (regHK.test(this.symbol)) {
            return '港股HK'
        } else if (regA.test(this.symbol)) {
            return '沪深A股'
        } else {
            return '未知'
        }
    },
    this.setPrice: function(price) {
        this.price = price;
        console.log(this.price)
    }
}

覆盖后stock.constructor === Stock则不等,因为此时构造器就是Object

Last Updated: 4/24/2020, 1:44:36 PM