1.有如下代码,解释Person、 prototype、 proto 、p、constructor之间的关联。 1 2 3 4 5 6 7 8 function Person(name){ this.name = name; } Person.prototype.sayName = function(){ console.log('My name is :' + this.name); } var p = new Person("若愚") p.sayName();
Person是一个函数,通过new(构造函数)方法生成一个实例p,任何函数都有prototype属性,它指向一个对象,而任何对象都有proto 属性,指向它的构造者Person的原型对象,即prototype对象。原型对象都有constructor,指向函数(Person)本身。2.上例中,对对象 p可以这样调用 p.toString()。toString是哪里来的? 画出原型图?并解释什么是原型链。
toString来自于对象Object.prototype
原型链:使用构造函数构造出来的对象会有一个proto 属性,它指向构造函数的原型对象prototype,原型对象prototype作为一个对象也拥有proto 属性,它指向原型对象的构造者,也就是Object对象的prototype属相。由proto 指向构造者的prototype原型对象,在最终指向Object对象构成的链条,就是原型链。3. 对String做扩展,实现如下方式获取字符串中频率最高的字符 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 String.prototype.getMostOften = function(){ var json = {}, max = 0, result; //for 循环string内的每一个字母 如果出现过这字字母就在后面的次数上+1,没出现过就 =1 for(var i = 0;i<this.length;i++){ if(json[this[i]] !== undefined){//if(json[this[i]]){ json[this[i]] +=1; }else{ json[this[i]] = 1; } } // console.log(json); //for循环json键值对,和max比大小 for(var key in json){ if(json[key]>max){ max = json[key]; result = key; } } return result; }; var str = 'ahbbccdedddddfg'; var ch = str.getMostOften(); console.log(ch); //d , 因为d 出现了5次
4.instanceOf有什么作用?内部逻辑是如何实现的?
作用: 判断一个对象是否某个构造函数构造的实例。实质是构造函数的原型对象(Function.prototype)是否在变量的原型链(proto )上 1 2 3 4 5 6 7 8 function isObjInstanceOffunc(obj,func) { var __proto__=obj.__proto__; do{ if(__proto__===func.prototype) return true; if(!__proto__) return false; }while(__proto__=__proto__.proto__) return false; }
<
js继承的实现
js对象与原型
>