关于prototype 属性
函数(functions)在javascript中本身就是对象,它有方法和属性。关于函数的属性,prototype是比较重要的一个。
function foo(a,b){
return a*b;
}
typeof foo.prototype;//object
可以为prototype添加属性,
foo.prototype={}
这个属性对foo函数没有任何影响,仅仅当foo作为构造函数的时候。prototype才会有意义.
给prototype添加属性和方法
前几节学过的用构造函数创建对象,主要的思路还是用new操作符访问this。这个this包含了构造函数返回的对象。我们可以往this里添加属性和方法也就是,也就是给这个对象添加了属性和方法。让我们看看下列的代码
function Gadget(name,color){
this.name=name;
this.color=color;
this.whatAreYou=function(){
return 'I am a '+this.color+' '+this.name;
}
}
添加属性和方法到prototype中,是另一种给对象添加功能的方法。让我们添加下price和rating和getInfo().
Gedget.prototype.price = 100;
Gedget.prototype.rating= 3;
Gedget.prototype.getInfo=function(){
return 'Rating: '+this.rating+',price: '+this.price;
}
如果你感觉这么写很麻烦我们也可以用到以前创建对象所用到的方法
Gadget.prototype = {
price: 100,
rating: 3,
getInfo: function() {
return 'Rating: ' + this.rating + ', price: ' + this.price;
}
};
这两种方法都是一样的。
调用Prototype的属性和方法
所有的属性和方法都可以添加到prototype中,对于对象是直接可以访问的。如果创建了一个对象,就可以访问所有的属性和方法了。
var newtoy = new Gadget('webcam','black');
newtoy.name;//webcam
newtoy.color;//black
newtoy.whatAreYou();//I am black webcam
newtoy.price;//100
newtoy.rating;//3
newtoy.getInfo();//Rating:3,price:100
对象的传递,实质上传递的是个引用,也就意味这每次创建个对象,prototype属性并不是复制而成,这样就可以动态的修改prototype的属性,所有创造的对象的属性也就会随着prototype的更改而更改。代码如下
Gadget.prototype.get=function(what){
return this[what];
}
newtoy.get('price');//100
newtoy.get('color');//'black'
newtoy对象是在get方法建立之前而生成的,但是newtoy还是可以访问get方法的。这就是prototype的妙处。
自身属性和prototype属性的对比
在上个例子中getInfo这个方法,用的是this来调用rating和price的。当然也可以用Gedget.prototype来重写这个方法
Gadget.prototype.getInfo = function() {
return 'Rating: ' + Gadget.prototype.rating + ', price: ' + Gadget.prototype.price;
};
这个上面的方法有什么不同?首先要了解prototype更多的细节问题.
var newtoy = new Gadget('webcam','black');
当访问newtoy.name的时候,Javascript引擎会检索这个对象的所有属性直到找到name的属性,并返回它的值。
newtoy.name;//webcam
如果访问rating会怎么样呢?Javascript引擎首先会检索这个对象的所有属性,发现并没有叫rating这个属性。然后再去找创造这个对象的构造函数的prototype(也就是newtoy.constructor.prototype).如果这个属性找到就返回。
newtoy.rating;//3
当然这么访问和如下代码是一样的
newtoy.constructor.prototype.rating;//3
对prototype的属性进行重写
前几个例子说明了如果没有自身的属性,就会找prototype的属性。下面引出了这样一个问题,如果自身的属性和prototype的属性都一样的话,会怎么样呢。看如下代码
function Gadget(name) {
this.name = name;
}
Gadget.prototype.name = 'foo';//foo
在创建一个新的对象
var toy = new Gadget('camera');
toy.name;//camera
发现了toy.name的值是camera.这就相对于prototype的name属性进行重写。
delete toy.name;//true
toy.name;//foo
如果删除自身属性name,prototype的属性name就生效了
当然你可以重新创建toy的属性
toy.name='camera';
toy.name;//camera
分享到:
相关推荐
JavaScript中的`prototype`是一个核心概念,它涉及到对象继承和函数原型。在JavaScript中,每创建一个函数,该函数就会自动获得一个名为`prototype`的属性,这个属性是一个对象,用于实现对象间的继承。同时,每个...
Prototype.js 是一个强大的JavaScript类库,它为开发者提供了丰富的功能,使得创建具有高度互动性和Web2.0特性的富客户端页面变得更为简单。这个库的设计理念是扩展JavaScript的基础对象,提供一套统一且易于使用的...
在JavaScript中,每个函数都有一个`prototype`属性,这个属性是一个对象,用于添加或扩展实例方法。当尝试访问一个对象的属性时,如果该对象本身没有这个属性,JavaScript会查找其原型,如果原型也没有,就继续查找...
JavaScript Prototype 是一种重要的编程概念,尤其在Web开发中不可或缺。这个压缩包文件“JavaScript_Prototype(源代码+中文手册).rar”包含了关于JavaScript原型的源代码和中文手册,为学习和理解这一主题提供了...
JavaScript,作为一种广泛应用于Web开发的脚本语言,其高级特性如闭包(closures)、原型(prototype)和继承(inheritance)是理解其精髓的关键。本文将深入探讨这些概念,帮助开发者更好地掌握JavaScript的核心。 ...
prototype.js是一个非常优雅的javascript基础类库,对javascript做了大量的扩展,而且很好的支持Ajax,国外有多个基于此类库实现的效果库,也做得很棒。 prototype.js不仅是一个有很大实用价值的js库,而且有很...
Prototype 是一个广泛使用的JavaScript库,设计目的是为了简化JavaScript的开发,尤其是处理DOM操作、AJAX交互以及事件处理等方面的工作。它通过提供一系列实用的工具函数和面向对象的特性,极大地提高了JavaScript...
每个 JavaScript 对象都有一个内部属性 `[[Prototype]]`,它链接到另一个对象,即原型对象。当我们尝试访问一个对象的属性或者方法时,如果该对象自身不包含此属性或方法,则会沿着原型链向上查找,直到找到该属性或...
Prototype是一个轻量级的JavaScript库,它增强了JavaScript语言的功能,简化了DOM操作。Prototype的核心特性包括元素选择器、事件处理、Ajax交互以及对JavaScript对象和类的支持。它通过提供一套简洁的API,使得...
在JavaScript中,`prototype`是一个非常重要的概念,尤其是在面向对象编程(OOP)方面。通过利用`prototype`,开发者能够更高效地管理对象间的共享属性和方法,从而节省内存资源并提高程序性能。本文将详细介绍如何...
JavaScript中的`prototype`属性是实现面向对象编程的关键概念之一,尤其在JavaScript中,它用于实现对象的继承。本文将深入探讨`prototype`的含义、作用以及如何使用。 1. **什么是prototype** 在JavaScript中,每...
在JavaScript中,每个函数都有一个`prototype`属性,这个属性是一个对象,它的作用是当试图访问一个对象的属性时,如果该对象自身没有这个属性,就会去查找它的原型对象,以此类推,直到找到属性或者到达原型链的...
JavaScript中的`prototype`属性是面向对象编程的关键特性之一,它关联了函数(特别是构造函数)与实例之间的继承关系。每个函数都有一个`prototype`属性,这个属性是一个对象,包含了所有实例共享的方法和属性。当...
javascript的prototype原型简单介绍: prototype原型是javascript中特别重要的概念,属于必须要掌握,如果没有良好的掌握的话,进一步用好或者学好js基本是不可能的实现的事情,并且此概念稍有难度,可能对于初次接触...
JavaScriptprototype的深度探索不是原型继承那么简单.pdf
"Prototype.js"是一个针对JavaScript的开源库,旨在增强和扩展JavaScript的基本功能,尤其在处理DOM(文档对象模型)操作、事件处理以及Ajax交互时提供了极大的便利。 ### 1. Prototype.js核心概念 - **原型链**:...
JavaScript中的`prototype`是理解面向对象编程的关键概念之一。它是一种机制,允许对象共享属性和方法,从而实现代码复用。在JavaScript中,每个函数(包括构造函数)都有一个内置的`prototype`属性,这个属性指向一...
然而,原生JavaScript的API庞大且不统一,为了简化开发,社区创造了一系列的框架,其中jQuery、MooTools和Prototype是三个非常著名的JavaScript库。这些框架提供了一致的接口,增强了DOM操作,简化了事件处理,并...
在 JavaScript 中,prototype 是一个非常重要的概念,它提供了一套面向对象编程的基础设施,允许开发者定义对象类型和实现继承。下面我们将详细介绍如何使用 prototype 定义对象类型。 一、什么是 Prototype? 在 ...