JS 原型链(四)-new,this,instanceof,typeof,for...in
new和this是javascript中非常重要的两个关键字。它们出现在了前面的例子中,这里简单记录下对它们的理解。
首先说下new一个对象的过程:
1.创建一个新对象。 2.this指向这个新对象。 3.执行代码,即对this赋值。 4.返回this
此外,构造函数就像一个模板。可以new出多个实例。可以使用instanceof判断引用类型属于哪个构造函数的方法。一个函数是否是一个变量的构造函数。f instanceof Foo的判断逻辑是:f 的__proto__一层一层往上,看能否对应到Foo.prototype.再试着判断f instanceof Object.
这里有一个有趣的地方, div1 instanceof Function为false,可是div1 instanceof Object为true。而 Ele instanceof Function为true,同时Ele instanceof Object为true。因为这里是两条线。一条线是Function到Object再到null,一条线是没有Function,到 Object再到null。这个差异同时也可以从new一个对象的过程中可以看出。
typeof 总是习惯拿来和instanceof来比较,上面说了instanceof是用来判断引用类型属于哪个构造函数的方法。那在js中,typeof又能够得到哪些类型呢?
从上面的截图中可以看出,typeof只能准确辨别出js中的值类型,对于引用类型只能区别出function,其他都是oobject。可能因为function在js中太重要的缘故。
this的指向总是让人捉摸不透,这里用一句话概述它最为普遍的指向:通过调用对象属性方法来访问this,t无论这个方法是自身的一个属性还是从原型中得到的一个属性,this永远指向这个对象。这个例子可以从(二)中的例子中看出,多次碰到this.ele都是指一个元素,this一直指向div1自身。
for...in用来循环对象自身的属性。如果要屏蔽来自原型的属性,则可以加上f.hasOwnProperty(item)。这里注意高级浏览器这一步帮我们做了,但是还是建议加上这个判断,保证程序的健壮性。
网友评论