Y20134064 Y20134064
罢了罢了
关注数: 26 粉丝数: 199 发帖数: 8,473 关注贴吧数: 13
为新手科普JS原型知识点,如果有错,请纠正,谢谢 JS __proto__;prototype 首先 对象才会有__proto__,函数(为了命名规范,所有函数首字母都是大写,那用这一规范来说的话,粗暴的理解为首字母大写的才会有哦prototype)才会有prototype; 比如(1).__proro__===Number.protype,({}).__proto__===Object.prototype var Factory= function(){} 那么Factory.__proto__===Function.prototype; var obj={}; obj.__proto__===Object.prototype; Number.__proto__===Function.prototype或者String.__proto__===Function.prototype 等(内置对象); 此处省略1万字 Function.prototype.__proto__===Object.prototype 这个说明函数也是对象的实例 于是继续 Number.__proto__.__proto__===Object.prototype 那么假如 var Person=function(){ }; 为什么要这样写?为什么仅仅是通过 new Person()创建的对象才会有tell方法? Person.prototype.tell===function(){ console.log('tell'); } var person=new Person(); person.__proto__===Person.prototype;//true 那么 自然就不会有person.__proto__!==Object.prototype //true 其实真正是这样的 Person.prototype.__proto__===Object.prototype; 于是 可以得出 person.__proto__.__proto__===Object.prototype; 于是 还可以得出 通过对象字面量创建的对象和通过构建函数创建的对象不一样。 从此原型是路人。 (Object.create(proto, [ propertiesObject ])) 那么如果以上搞懂了,分分钟get以下代码: Function.prototype.method = function(name, fn) { if (!this.prototype[name]) { this.prototype[name] = fn;//保证每一个对象都要有相应的方法。 } return this; }
1 下一页