问答
1. 有如下代码,解释
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();
Person
:p的构造函数,自己本身也是对象,其原型是Person.prototype
prototype
:Person和p的原型
__proto__
:每个对象都会有的一个属性,指向其原型对象(Object.prototype除外)
p
:由构造函数Person所生成的对象
constructor
:Person的原型对象所具有的一个属性,指向Person
2. 上例中,对对象 p可以这样调用 p.toString()。toString是哪里来的? 画出原型图?并解释什么是原型链。
toString来自Object的原型对象
如上图所示,使用者想调用p.toString()方法,但对象p并没有,于是向p的原型p.prototye找,原型中没有,继续向上一级原型对象找,最终找到了Object.prototype中的toString()方法。Object的原型对象Object.toString已经没有原型对象了。
3. 对String做扩展,实现如下方式获取字符串中频率最高的字符
String.prototype.getMostOften=function(){
var arr = {},
max = 0,
num = 0;
for(var i=0;i<this.length;i++){
if(arr[this[i]]){
arr[this[i]] ++ ;
}else{
arr[this[i]] = 1;
}
}
for(var key in arr){
if(max<arr[key]){
max = arr[key];
num = key;
}
}
return "出现最多的字母:" + num + "\n" + "出现次数:" + max;
}
var str = 'ahbbccdeddddfg';
var ch = str.getMostOften();
console.log(ch); //d , 因为d 出现了5次
4. instanceOf有什么作用?内部逻辑是如何实现的?
判断一个对象是否是某个对象的实例
p1 instanceOf p //true or false
function isInstanceOf(obj,func){
var __proto__ = __proto__.__proto__
do{
if(obj.__proto__ == func.prototype){return true;}
if(!__proto__){return false;}
}while(__proto__ = __proto__.__proto__)
};
本文版权归本人(帘外修竹),转载须说明来源