IFE 2019年03月21日 分类: 前端知识体系 标签: javascript 浏览量: 1698
function NewFunc(func){ var ret = {}; if (func.prototype !== null) { ret.__proto__ = func.prototype; } var ret1 = func.apply(ret, Array.prototype.slice.call(arguments, 1)); if ((typeof ret1 === "object" || typeof ret1 === "function") && ret1 !== null) { return ret1; } return ret; }
var a={}
其实是var a=new Object()
的语法糖var a =[]
其实是var a=new Array()
的语法糖function Foo(){...}
其实是var Foo= new Function(...)
arr1 instanceof Array
instanceof应用:
//能遍历对象和数组的forEach函数 function forEach (obj, fn) { var key; if (!(a instanceof Object)){ console.log('不是对象') return } if (obj instanceof Array) { // 准确判断是不是数组 obj.forEach(function (item, index) { fn(index, item) }) } else { // 不是数组就是对象 for (key in obj) { fn(key, obj[key]) } } } var arr = [1, 2, 3]; //这里的参数顺序换了,为了和对象的遍历格式一致 forEach(arr, function (index, item) { console.log(index, item); }) var obj = { x: 100, y: 200 } forEach(obj, function (key, value) { console.log(key, value); })
原型规则:
原型链:
实例:
//e.g 封装DOM查询 function Elem(id) { this.elem = document.getElementById(id); } Elem.prototype.html =function (val) { var elem =this.elem; if (val) { elem.innerHTML =val; return this; //链式操作 } else { return elem.innerHTML; } } Elem.prototype.on =function (type,fn) { var elem =this.elem; elem.addEventListener(type,fn); return this; } var div1 = new Elem('div1'); //console.log(div1.html()); div1.html('<p>I am a programmer</p>') div1.on('click',function () { alert('clicked'); })