JavaScript原型要点笔记

接触JavaScript一年3个月了,感觉自己的JavaScript水平还是停留在半年以前。好惭愧。以前广度关注较多,现在深度也开始吧。


原型这个看一遍概念大概就知道是什么东西了。我这里主要记录那些让我有点懵逼的地方。

1、constructor是啥?

在原型模式声明中,多了两个属性,这两个属性都是创建对象时自动生成的。

__proto__属性是实例指向原型对象的一个指针。它的作用就是指向构造函数的原型prototypr。

通过这两个属性,就可以访问到原型里的属性和方法了。


2、每个对象都有prototype属性吗?

不对。我们创建的每个函数都有prototype属性,这个属性是一个对象,它的用途是包含可以由特定类型的所有实例共享的属性和方法。


3、如何判断对象是否拥有某个属性?

有两种方式:

       1>、in操作符,它会在通过对象能够访问给定属性时返回true,无论改属性存在于实例中还是原型中。

       2>、hasOwnProperty()方法,这个方法可以检测属性是否在实例中。

        扩展一下:

       当检查对象上某个属性是否存在时,hasOwnProperty 是唯一可用的方法。同时在使用 for in loop 遍历对象时,推荐总是使用 hasOwnProperty 方法这将会避免原型对象扩展带来的干扰,我们来看一下例子:

// 修改 Object.prototype
Object.prototype.bar = 1;

var foo = {moo: 2};
for(var i in foo) {
    console.log(i); // 输出两个属性:bar 和 moo
}

我们没办法改变for in语句的行为,所以想过滤结果就只能使用hasOwnProperty 方法,代码如下:

// foo 变量是上例中的
for(var i in foo) {
    if (foo.hasOwnProperty(i)) {
        console.log(i);
    }
}

4、问题4是问题3的扩展,如何判断属性是在构造函数的实例里,还是在原型里?

采用hasOwnProperty。


5、constructor被重写是什么概念?

constructor一般指向的是构造函数自身,当然可以重写,指向别的构造函数,这样原型连就会被改变。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值