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指向,他俩的区别在于传递参数的不同 就不赘述了