//原型 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原型操作知识点 #### 一、Prototype基础概念 **Prototype** 在 JavaScript 中是一个非常重要的概念,它支持面向对象编程中的继承特性。每个 JavaScript 对象都有一个内部属性 `[...
javascript的prototype原型简单介绍: prototype原型是javascript中特别重要的概念,属于必须要掌握,如果没有良好的掌握的话,进一步用好或者学好js基本是不可能的实现的事情,并且此概念稍有难度,可能对于初次接触...
JavaScript中的prototype机制是其面向对象编程的核心概念之一,它允许开发者创建具有继承属性和方法的对象。在JavaScript中,几乎所有的对象都是通过某个构造函数或对象字面量创建的,而这些构造函数或对象自身都有...
JavaScript中的原型链(Prototype Chain)是理解面向对象编程在JavaScript中的实现方式的关键概念。原型链是基于原型(Prototype)机制的一种实现,它允许对象继承其他对象的属性和方法。在JavaScript中,每个函数...
Function 类型有一个属性 prototype,直接翻译过来就是原型。这个属性就是一个指针,指向一个对象,这个对象包含一些属性和方法,这些属性和方法会被当前函数生成的所有实例(对象)所共享。 这句话根据前面所说的,...
JavaScript中的原型(Prototype)是理解JavaScript继承机制的关键概念。它是一种对象属性,允许一个对象访问并继承另一个对象的属性和方法。在这个“javascript prototype文档”中,我们可以期待深入学习JavaScript...
JavaScriptprototype的深度探索不是原型继承那么简单.pdf
JavaScript中的`prototype`是一个核心概念,它涉及到对象继承和函数原型。在JavaScript中,每创建一个函数,该函数就会自动获得一个名为`prototype`的属性,这个属性是一个对象,用于实现对象间的继承。同时,每个...
在JavaScript编程语言中,prototype原型和原型链是理解其面向对象特性的核心概念。JavaScript是一种基于原型的语言,它与传统的面向对象语言(如Java或C#)不同,后者是基于类的继承模型。而JavaScript使用原型链来...
JavaScript中的原型模式是一种实现面向对象编程(OOP)的关键机制,它基于原型继承,使得对象可以从其他对象那里获得属性和方法。在这个模式下,每个函数都有一个`prototype`属性,这个属性是一个对象,用于共享属性...
在JavaScript中,每个函数都有一个prototype属性,这个属性指向一个对象,这个对象就是所谓的原型对象。当我们创建一个函数实例时,实例会自动获取一个内部属性[[Prototype]],这个属性通常通过`__proto__`或者`...
**原型设计模式(Prototype Pattern)**是一种创建型设计模式,它允许我们通过复制现有的对象来创建新对象,而不是通过构造函数来实例化新对象。在面向对象编程中,当我们需要频繁地创建具有相同或相似属性的对象时,...
JavaScript中的prototype是实现原型继承的关键,它允许我们向对象添加方法和属性。下面将详细介绍使用prototype实现封装、继承和多态的概念以及相关的代码示例。 首先,封装是面向对象编程中的一个核心概念,它涉及...
JavaScript中的构造函数、`new`操作符和`prototype`属性也与原型链紧密相关。当我们使用`new`关键字调用一个构造函数时,会创建一个新的对象,这个新对象的`[[Prototype]]`被设置为构造函数的`prototype`属性所指向...
这个压缩包文件“JavaScript_Prototype(源代码+中文手册).rar”包含了关于JavaScript原型的源代码和中文手册,为学习和理解这一主题提供了丰富的资源。 JavaScript是一种动态类型的语言,其核心特性之一就是原型...
JavaScript,作为一种广泛应用于Web开发的脚本语言,其高级特性如闭包(closures)、原型(prototype)和继承(inheritance)是理解其精髓的关键。本文将深入探讨这些概念,帮助开发者更好地掌握JavaScript的核心。 ...