//原型 prototype 创建每一个函数都有一个prototype,这个属性其实是一个指针,这个指针总是指向一个对象 这个对象的用途就是将特定的属性和方法包含在内,起到一个所有实例共享的作用。 //构造函数方式 --1. function Person(name, age){ this.name = name; this.age = age; this.sayName = function(){alert('我是姓名!')}; } var p1 = new Person('z1',20); var p2 = new Person('z3',20); alert(p1.sayName == p2.sayName); //false 每次实例化的对象不同 alert(p1.name == p2.name); //false --2. function Person(name, age){ this.name = name; this.age = age; this.sayName = sayName; } function sayName(){ alert(this.name); } p1.sayName = sayName; p2.sayName = sayName; var p1 = new Person('z1',20); var p2 = new Person('z3',20); alert(p1.sayName == p2.sayName); //true 实例化的内容相同 --3. function Person(){} var obj = Person.prototype; obj.name = 'z3'; obj.age = 20; obj.sayName = function(){alert(this.name)}; var p1 = new Person(); var p2 = new Person(); alert(p1.age); alert(p2.age); alert(p1.sayName == p2.sayName);//true var obj1 = p1.prototype; /* 每次代码读取一个对象的属性的时候,优先使用实例对象里name的属性,若没有则取原型里面的属性。 */ p2.name = 'w5'; alert(p2.name); //w5 //删除实例的属性(原型的属性使用delete无法删除) delete p2.name; //显示实例原型的名称 alert(p2.name); //z3 //关于原型的常见方法 //obj.isPrototypeOf(Object) 用于检查传入的对象的原型是否是obj alert(obj.isPrototypeOf(p1)); //true //Object.getPrototypeOf() 根据实例对象获取原型对象 var prototypeObj = Object.getPrototypeOf(p1); alert(prototypeObj == Person.prototype); //true //obj.hasOwnProperty() 判断一个属性是否是属于实例的属性还是原型的属性 var p3 = new Person(); alert(p3.name); alert(p3.hasOwnProperty('name'));//false,非当前实例的属性 //in 判断一个属性是否存在实例的属性或者原型的对象中 var p4 = new Person(); p4.name = 'z6'; alert('name' in p4); //true var p2 = new Person(); alert('name' in p2); //true //手工创建方法, 判断一个属性是否是原型中的属性 function isPrototypeProperty(name){ var obj = this; alert(!obj.hasOwnProperty(name) && name in obj); } var p1 = new Person(); isPrototypeProperty.call(p1,'name'); //true //ECMA5新特性 Object.keys //获取当前对象所有keys, 返回一个数组 var p1 = new Person(); p1.name = 'z3'; p1.age = 20; var attributes = Object.keys(p1); alert(attributes.length); //2 alert(attributes); //name,age //枚举对象所有的属性,不管内部属性能否被枚举,比如构造函数 //构造函数方式 function Person(){} var obj = Person.prototype; obj.name = 'z3'; obj.age = 20; obj.sayName = function(){alert(this.name)}; var atr = Object.getOwnPropertyNames(Person.prototype);/ alert(atr); //constructor,name,age,sayName ------------------------------------------------------------------------------------------------- 原型的另外一个作用就是扩展对象中的属性和方法 利用JS实现数组中每个元素的遍历 var arr = [1,2,3,[4,[5,6]]]; Array.prototype.each = function(fn){ var obj = this; try{ //1.遍历每一个元素 obj.i || (obj.i=0); //需要用括号括起来 //2.判断this对象是数组且数组的大小大于0 if(this.length>0 && fn.constructor == Function){ while(obj.i < obj.length){ //while循环的位置 // 获取数组的每一项 var element = obj[obj.i]; // 如果当前元素获取到 并且当前元素是一个数组 if(element && element.constructor == Array){ element.each(fn); }else{ fn.call(null,element);//等同于fn(element) } obj.i++; } obj.i=null; //释放内存(delete this.i) } }catch(ex){ //do something } return this; } arr.each(function(item){ alert(item); }); 在javascript中,“&&”运算符运算法则如下: 数据类型 转换为bool后的值 null FALSE undefined FALSE Object TRUE function TRUE 0 FALSE 1 TRUE 0、1之外的数字 TRUE 字符串 TRUE ""(空字符串) FALSE 如果&&左侧表达式的值为真值,则返回右侧表达式的值;否则返回左侧表达式的值。 这就是说 var i=""&&"真值";//->i="" i="真值"&&"其他真值";//->i="其他真值" i="真值"&&"";//->i="" “||”运算符的运算法则如下: 如果||左侧表达式的值为真值,则返回左侧表达式的值;否则返回右侧表达式的值。 这就是说: var i=""||"真值";//->i="真值" i="真值"||"其他真值";//->i="真值" i="真值"||"";//->i="真值"
相关推荐
javascript prototype原型操作笔记.docx
javascript的prototype原型简单介绍: prototype原型是javascript中特别重要的概念,属于必须要掌握,如果没有良好的掌握的话,进一步用好或者学好js基本是不可能的实现的事情,并且此概念稍有难度,可能对于初次接触...
在 JavaScript 中,prototype 不但能让对象共享自己财富,而且 prototype 还有寻根问祖的天性,从而使得先辈们的遗产可以代代相传。
既然prototype是对象的“原型”,那么由该函数构造出来的对象应该都会具有这个“原型”的特性。事实上,在构造函数的prototype上定义的所有属性和方法,都是可以通过其构造的对象直接访问和调用的。也可以这么说,...
主要介绍了JavaScript使用prototype原型实现的封装继承多态,涉及javascript prototype与面向对象程序设计相关操作技巧,需要的朋友可以参考下
JavaScriptprototype的深度探索不是原型继承那么简单.pdf
跟我学习javascript的prototype原型和原型链,感兴趣的小伙伴们可以参考一下
JavaScript中的prototype(原型)属性研究
主要介绍了JavaScript中的prototype原型学习指南,包括原型链与原型继承等重要知识,需要的朋友可以参考下
怎样用JavaScript实现原型模式 概述 原型模式是指原型实例指向创建对象的种类,并通过拷贝这些原型创建新的对象,是一种用来创建对象的模式,也就是创建一个对象作为另一个对象的prototype属性; prototype警告...
JavaScript prototype(原型对象) 所有的 JavaScript 对象都会从一个 prototype(原型对象)中继承属性和方法。 在前面的章节中我们学会了如何使用对象的构造器(constructor): 实例 function Person(first, ...
主要介绍了javascript 对象 与 prototype 原型用法,结合实例形式分析了javascript 对象 与 prototype 原型实现对象创建、继承、拷贝等相关操作技巧,需要的朋友可以参考下
详解JavaScript中基于原型prototype的继承特性_.docx
主要介绍了JavaScript中的原型prototype完全解析,prototype可是js界"一切皆对象"论调的重要支撑,讲解了__proto__属性和原型链等干货,需要的朋友可以参考下
Javascript 原型 这个包包含一个脚本,其中包含用于获取选项和运行某些东西的主要功能。 它是一部分,以学习如何编写标准代码和TDD的常用用法。 使用逐步此代码的开发。 安装 该包是自洽的,但如果你想自己测试,你...