美文网首页
构造对象

构造对象

作者: kzc爱吃梨 | 来源:发表于2019-09-26 10:18 被阅读0次

    new


    new运算符接受一个函数F及其参数:new F(arguements...)。这一过程分成三步:

    1. 创建类的实例。这不是是把一个空对象的proto属性设置为F.prototype。
    2. 初始化实例。函数F被传入参数并被调用,关键字this指向该实例。
    3. 返回实例

    根据这几个特性,我们可以改造一下创建对象的方式

    function Person(name) {
        this.name = name
        this.sayName = function() {
            console.log(this.name)
        }
    }
    var p = new Person('hunger')
    

    构造函数


    • 任何函数使用new表达式就是构造函数

    • 每个函数都自动添加一个名称为prototype属性,这是一个对象

    • 每个对象都有一个内部属性 __proto__(规范中没有指定这个名称,但是浏览器都这么实现的) 指向其类型的prototype属性,类的实例也是对象,其__proto__属性指向“类”的prototype

    prototype

    prototype
    通过图示我们可以看出一些端倪,实例可以通过__prop__访问到其类型的prototype属性,这就意味着类的prototype对象可以作为一个公共容器,供所有实例访问。

    抽象重复


    • 我们刚才的问题可以通过这个手段解决

    • 所有实例都会通过原型链引用到类型的prototype

    • prototype相当于特定类型所有实例都可以访问到的一个公共容器

    • 重复的东西移动到公共容器里放一份就可以了

    看下代码

    function Person(nick, age){
        this.nick = nick;
        this.age = age;
    }
    Person.prototype.sayName = function(){
        console.log(this.nick);
    }
    
    var p1 = new Person();
    p1.sayName();
    

    这时候我们对应的关系是这样的


    image.png

    相关文章

      网友评论

          本文标题:构造对象

          本文链接:https://www.haomeiwen.com/subject/jzmgyctx.html