内置对象的原型对象: 解决兼容性问题: 如果需要的API,在指定类型的原型对象中不存在,就要在该类型的原型对象中添加所需的共有成员 其中,在API内部要用this来获取当前正在调用API的点前的对象。 原型和原型链: 原型链:由各级父对象,逐级继承,形成的链式结构 控制着成员的使用顺序。 如何判断自有属性: var bool = obj.hasOwnProperty("属性名"); 如何判断共有属性: 首先: 确定不是自有属性 问题:不是自有属性:两种情况 1、可能在原型链上 2、压根没有 解决: !obj.hasOwnProperty("属性名") && obj.属性名 !=undefined; 如果强行使用某个子对象,修改共有属性,后果是:仅在当前子对象添加同名自有属性,导致当前子对象无法使用共有属性 删除属性: delete 对象.属性; 亲子鉴定: 1、用原型对象检查: var bool = father.isPrototypeOf(child); 判断child对象是否继承于father对象 2、用构造函数检查: var bool = child instanceof 构造函数; 用来判断child是否是构造函数创建出来的子对象 多态:同一个函数,在不同情况下表现出的不同状态。 重写:如果子对象觉得父对象的成员不好用,就可以在子对象本地重新定义同名成员来覆盖父对象成员。 示例代码如下: <!DOCTYPE html> < html lang = "en" > < head > < meta charset = "UTF-8" > < meta name = "viewport" content = "width=device-width, initial-scale=1.0" > < title >Document</ title > </ head > < body > < script > // var arr1 = new Array(); // var arr2 = new Array(); // arr.indexOf(str,fromi); var arr = [1,2,3,2,1]; // 0 1 2 3 4 // function indexOfs(){}. // 如果当前浏览器不支持indexOfs if(Array.prototype.indexOfs === undefined){ // 定义indexOfs函数 Array.prototype.indexOfs = function(val,formi){ // 如果fromi是?就从0开始遍历 formi === undefined && (formi = 0); // 从fromi开始遍历数组中每个元素 for(var i = formi;i< this.length ;i++){ // 如果,当前元素 = val if(this[i] === val){ // 返回当前位置i return i } } // 遍历结束,返回-1 return -1 } } // var i = arr .indexOfs(2,2); // console.log(i); document.write(arr.indexOfs(2));//1 document.write(arr.indexOfs(2,2));//3 document.write(arr.indexOfs(2,4));//-1 document.write(arr.indexOfs(5));//-1 var str = "\小明\t" ; console.log(str); if(String.prototype.tirm === undefined){ String.prototype.tirm = function (){ return this.replace(/^\s+|\s+$/g,""); } } str = str.tirm(); console.log(str); </script> </ body > </ html > |