Javascript中 constructor,__proto_

2018-01-15  本文已影响0人  三寸日光_梦尧

一 ,Constructor

1,正常情况下(那就是有例外) constructor指向创建当前对象的构造函数 如下

2.那么例外来了 当 constructor遇到prototype时 就要注意区分了  例子一

此时仍然可以看到返回true 我们知道每个函数都有一个默认的属性prototype,而这个prototype的constructor默认指向这个函数。那么继续例子二:

我们看到 此时返回值为false, 原因就是因为这个神奇的prototype做了手脚,那么来解释一下原因,我们在进行prototyope 的改变时 实际上是进行的是

所以说 constructor虽然是自带的属性 但是也会发生变化  所以遇到constructor 有prototype时大家一定要小心 。

二, __proto__和 prototype 

1.__proto__和 prototype  放在一起对比来说比较好 

    首先明确一点 prototype 是只有函数上才会有 ,__proto__是每个对象都有的属性(不要误以为函数没有函数当然是对象啊),但是__proto__不是一个规范的属性,只支持某些浏览器。

大多数情况下(很麻烦的又有例外) :__proto__可以理解为构造器的原型

即 __proto__ === constructor.prototype;

2.__proto__ 的指向取决于创建的方式

(1)直接声明方式

(2)构造器方式

(3)当create创建出来的对象 不遵循 _proto__ === constructor.prototype;

三.This

通过 apply和call可以改变this指向,他俩的区别在于传递参数的不同 就不赘述了

上一篇下一篇

猜你喜欢

热点阅读