前端基础(问答27)
2016-09-07 本文已影响52人
郑哲明
keywords: 原型链。
-
有如下代码,解释
Person
、prototype
、__proto__
、p
、constructor
之间的关联。
function Person(name){
this.name = name;
}
Person.prototype.sayName = function(){
console.log('My name is :' + this.name);
}
var p = new Person("若愚")
p.sayName();
1、Person是p的构造函数,p是Person的实例;
2、prototype是Person的原型对象,p的__proto__
指向该原型对象;
3、constructor是prototype的属性,指向p的构造函数Person;
-
上例中,对对象 p可以这样调用 p.toString()。toString是哪里来的? 画出原型图?并解释什么是原型链。
p的__proto__
指向Person.prototype,该prototype的__proto
指向Object.prototype。toString正式Object.prototype中的方法。
每一个对象都有自己的原型(即__proto__
),而原型(prototype)本身也是对象,因而形成了一条原型链;比如a是b的原型,b是c的原型,以此类推。这就是原型链。
-
对String做扩展,实现如下方式获取字符串中频率最高的字符
String.prototype.getMostOften = function () {
var getArr = this.split('').sort().join('').match(/(.)\1*/g).sort(function(a,b) {
return a.length - b.length
})
return getArr.pop()[0]
}
var str = 'ahbbccdeddddfg';
var ch = str.getMostOften();
console.log(ch); //d , 因为d 出现了5次
-
instanceOf有什么作用?内部逻辑是如何实现的?
instanceof运算符返回一个布尔值,表示指定对象是否为某个构造函数的实例。常用于判断值的类型:
var x = [1, 2, 3];
var y = {};
x instanceof Array // true
y instanceof Object // true
其实质是检查右边构造函数的原型对象(Function.prototype)是否在左边对象的原型链(__proto__
)上。内部逻辑可以用下面的函数表达:
function isObjInstanceOffunc(obj,func) {
var __proto__=obj.__proto__;
do{
if(__proto__===func.prototype) return true;
}while(__proto__=__proto__.proto__)
return false;
}
参考资料:
instance