前端相关

JS对象,原型

2017-08-31  本文已影响0人  DeeJay_Y

面向对象

是一种思维方式
三大特点:继承,多态,封装
几个概念: 类,对象,属性,方法,成员,类成员,实例成员,静态类,抽象类

创建对象的几种方式:

1,工厂模式

    function createObj (name,age) {
        var obj = {
            name: name,
            age: age,
            printName: function () {
                console.log(this.name);
            }
        }
        return obj;
    }
    var obj = createObj('zhangsan',20);
    obj.printName();
//    解决了构造过程复杂,需要了解对象细节的问题,但是构造出来的对象类型都是Object,没有识别度。

解决了构造过程复杂,需要了解对象细节的问题,但是构造出来的对象类型都是Object,没有识别度。

2,构造函数创建实例

关于function的一些知识:

//      构造函数创建实例
    function People (name,age) {
        this.name = name;
        this.age = age;
        this.sayName = function () {
            console.log(this.name);
        }
    }
    var p1 = new People('deejay',21); // new People表示将People函数作为构造函数来创建对象
    p1.sayName();
//构造函数在解决了上面的问题,同时为实例带来了类型,但可以注意到每个实例sayName方法实际上作用一样,但是每个实例要重复一遍,大量对象存在的时候是浪费内存

关于new操作符:

new运算符接受一个函数F及其参数: new F(arguments),这一过程分为3步:

关于instanceof 操作符

instanceof 是一个操作符,可以判断对象是否为某个类型的实例
p1 instanceof People; // true
p1 instanceof Object; // true
instanceof判断的是对象
1 instanceof Number; // false

构造函数在解决了上面的问题,同时为实例带来了类型,但可以注意到每个实例sayName方法实际上作用一样,但是每个实例要重复一遍,大量对象存在的时候是浪费内存。

构造函数

对于实例中的属性,如果存在则输出,不存在就会向构造函数的prototype中寻找。所以对于刚才的问题,可以这样解决:

所以对于刚才的构造函数,可以这么写:

    function People (name,age) {
        this.name = name;
        this.age = age;
        People.prototype.sayName = function () {
            console.log(this.name);
        }
    }
    var p1 = new People('deejay',21);
    p1.sayName();

这个时候的对应关系是这样的:

上一篇下一篇

猜你喜欢

热点阅读