Skip to content

构造函数

定义构造函数

在JS中,构造函数就是用来创建对象的。

js
/*
1. 构造函数遵循大驼峰命名法。
2. 构造函数中有this关键词,this的指向后面具体分析。
3. 构造函数实际上会默认有一句 var this = {},并且将this返回。
4. 构造函数的使用必须用new关键词。
*/
function Person(firstName, lastName) {
  // var this = {};

  this.firstName = firstName;
  this.lastName = lastName;
  this.fullName = firstName + lastName;
  this.sayHi = function () {
    console.log('我的名字叫做:' + this.fullName);
  };

  // return this;
}

var person1 = new Person('邓', '旭明');
person1.sayHi();

var person2 = new Person('姬', '成');
person2.sayHi();

在JS中,所有的对象都是用构造函数创建的。

js
//1.对象
//语法糖创建
var obj = { 
  a: 1,
  b: 2,
};
//实际上
var obj = new Object(); // 创建一个空对象
obj.a = 1;
obj.b = 2;
console.log(obj);

//2. 数组
var arr = [1, 2, 3];//语法糖

var arr = new Array(1, 2, 3); // 创建一个数组
console.log(arr);

//3. 函数
function sum(a, b) {//语法糖
  return a + b;
}

var sum = new Function('a', 'b', 'return a+b');//实际上
console.log(sum(1, 2));

函数就是为了解决代码复用,所以封装函数的时候,一定是一个一劳永逸的事情,当调用次数大于声明次数就可以去封装。

函数的封装应当多考虑使用的时候是否便捷。

练习--创建扑克牌

创建一副扑克牌,要求:1. 创建单个牌的构造函数,具有花色 数值的属性。 2. 创建一副扑克牌的构造函数。

js
/**
 * 利用构造函数创建一幅扑克牌
 * @param {number} color  1 表示红桃,2 表示黑桃,3 表示方片,4 表示梅花
 * @param {number} num   1-13 分别表示 A - K    14 joker  15 JOKER
 */
function Poker(color, num) {
    this.color = color;//花色
    this.num = num;//点数

    // 打印
    this.print = function () {
        //区分大小王
        if (this.num == 14) {
            console.log('joker');
            return;
        }
        if (this.num == 15) {
            console.log('JOKER');
            return;
        }

        var colorArr = ['♥', '♠', '♦', '♣'];
        var numArr = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K'];
        console.log(colorArr[this.color - 1] + numArr[this.num - 1]);
    }
}


/**创建一整副扑克牌 */
function Deck() {
    this.pockers = [];//一整副扑克牌

    //创建扑克牌
    for (var i = 1; i <= 4; i++) {
        for (var j = 1; j <= 13; j++) {
            var poker = new Poker(i, j);
            this.pockers.push(poker);
        }
    }
    this.pockers.push(new Poker(5, 14));
    this.pockers.push(new Poker(5, 15));

    // 打印扑克牌
    this.print = function () {
        for (let i = 0; i < this.pockers.length; i++) {
            this.pockers[i].print();
        }
    }
}




// 创建扑克牌
const deck = new Deck();
deck.print();

MIT License