JavaScript基础--原型链

JavaScript中的原型链


写在前面:这边文章主要是弄清JavaScript原型链中的一些概念,(虽然我是个小白-_-!)。可能会有一些错误,还望大家批评指正。

示例代码
    function People(options) {
        this.name = options.name;
        this.age = options.age;
        this.sex = options.sex;
    }
    People.prototype.say = function() {
        console.log('my name is ' + this.name);
    }

    function Student(options) {
        People.call(this,options);
        this.math = options.math;
    }
    Student.prototype = Object.create(People.prototype);
    Student.prototype.constructor = Student;
    var xiaoming = new Student({
        name: 'xiaoming',
        age: 21,
        sex: 'man',
        math: 'A'
    });

这是JavaScript中的一个简单的继承,本文就针对这个例子来讨论JavaScript的原型链,话不多,上图(自己画了一个,不是特别美观。。)

image

问题一

为什么人们多说JavaScript中万物皆是对象,由图可知,沿着他们的原型链,最终多会到达Object.prototype。

问题二

对象都有prototype和proto属性,而对象的实例只有proto属性。

问题三

constructor(构造器属性),对于这个我的理解是,它相当于一种循环引用,例如Function.prototype.constructor = Function;

问题四

proto多指向其构造器的prototype: xiaoming.proto === Student.prototype。

问题五

为什么我们在使用for in 的时候,总是要强调要使用Object.hasOwnProperty(str)呢,因为在forin中,会沿着原型链查找。就比如上面xiaoming的例子,如果我们不使用Object.hasOwnProperty(str),遍历出来的结果会包含:constructor say。为了安全起见,在使用forin时还是最好使用Object.hasOwnProperty(str)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值