面向对象—创建对象

面向对象是一种思维方式,是把解决问题的关注点放到解决问题的一系列对象上。与之对应的是 面向过程 ,面向过程也是一种思维方式,是把解决问题的一些关注点放到解决问题的每一个详细的步骤上。

可以通过以下几种方式创建对象:

1.通过字面量创建对象

var obj = {
    name:"aaa",
    singer:"bbb"
};
var obj1 = {
    name:"xxx",
    singer:"yyy"
};

格式:{key:value, key:value ... }
使用这种方法每次只能创建一个对象,复用性较差。若想要创建多个对象,代码冗余度太高。

2.使用内置构造函数(JS自带的函数)创建对象

var obj = new Object();
obj.name = "aaa";
obj.singer = "bbb";

var obj1 = new Object();
obj1.name = "xxx";
obj1.singer = "yyy";

使用这种方法创建出来的对象都是空的对象,要手动添加属性,会造成代码重复。

3.封装简单的工厂函数

function createObj() {
    var obj = {};
    obj.xx = xxx;
    return obj;
};

这种方法虽然能够解决代码重复的问题,但是并没有解决对象识别的问题,即怎样知道一个对象的类型。所以这种方法现在也已经不推荐使用了。

4.构造函数

先定义一个普通函数,然后用关键字new来调用这个函数,并返回一个对象,该函数就变成了一个构造函数,它绑定的this 指向新创建的对象,并默认返回this。也就是说,不需要在最后写return this

function Person(name,age){
    this.name = name;
    this.age = age;
    this.sayHello = function() {
        console.log("Hey,man!");
    };
}
var stu1 = new Person("aaa",20);

如果忘记写关键字new,在严格模式下,this.name = name将报错,因为this绑定为undefined。在非严格模式下,this.name=name不报错,因为this绑定为window。于是无意间创建了全局变量name,并且返回undefined,结果会更糟糕。所以调用构造函数的时候千万不要忘记写new。为了区分普通函数和构造函数,按照约定,构造函数首字母应当大写,而普通函数首字母小写,这样一些语法检查工具会帮助你检测到漏写的new

欢迎查看我的另一篇文章 使用原型解决构造函数存在的问题 (传送门在这里~)

猜你喜欢

转载自blog.csdn.net/cathence/article/details/80292787