js中prototype的理解摘录

来源:互联网 发布:淘宝店心得 编辑:程序博客网 时间:2024/04/25 05:19

javascript中的每个对象都有prototype属性,Javascript中对象的prototype属性的解释是:返回对象类型原型的引用。

A.prototype = new B();

理解prototype不应把它和继承混淆。A的prototype为B的一个实例,可以理解A将B中的方法和属性全部克隆了一遍。A能使用B的方法和属性。这里强调的是克隆而不是继承。

原型法的主要思想是,现在有1个类A,我想要创建一个类B,这个类是以A为原型的,并且能进行扩展。我们称B的原型为A。

 

每一个构造函数都有一个属性叫做原型(prototype)。这个属性非常有用:为一个特定类声明通用的变量或者函数。

prototype属性可算是JavaScript与其他面向对象语言的一大不同之处。  prototype就是“一个给类的对象添加方法的方法”,使用prototype属性,可以给类动态地添加方法,以便在JavaScript中实现“ 继承”的效果。

javascript的方法可以分为三类:

a 类方法   b 对象方法    c 原型方法

function People(name){  this.name=name;  //对象方法  this.Introduce=function(){    alert("My name is "+this.name);  }}//类方法People.Run=function(){  alert("I can run");}//原型方法People.prototype.IntroduceChinese=function(){  alert("我的名字是"+this.name);}//测试var p1=new People("Windking");p1.Introduce();People.Run();p1.IntroduceChinese();

 

你不需要显式地声明一个prototype属性,因为在每一个构造函数中都有它的存在。

function Test(){}alert(Test.prototype); // 输出 "Object"

给prototype添加属性

就如你在上面所看到的,prototype是一个对象,因此,你能够给它添加属性。你添加给prototype的属性将会成为使用这个构造函数创建的对象的通用属性。

function Fish(name, color){this.name=name;this.color=color;}Fish.prototype.livesIn="water";Fish.prototype.price=20;var fish1=new Fish("mackarel", "gray");var fish2=new Fish("goldfish", "orange");var fish3=new Fish("salmon", "white")

你看到所有的鱼都有属性livesIn和price,我们甚至都没有为每一条不同的鱼特别声明这些属性。这时因为当一个对象被创建时,这个构造函数将会把它的属性prototype赋给新对象的内部属性__proto__。这个__proto__被这个对象用来查找它的属性。

用prototype给对象添加函数

function Employee(name, salary){this.name=name;               this.salary=salary;}Employee.prototype.getSalary=function getSalaryFunction(){return this.salary;}Employee.prototype.addSalary=function addSalaryFunction(addition){this.salary=this.salary+addition;}
var boss1=new Employee("Joan", 200000);var boss2=new Employee("Kim", 100000);var boss3=new Employee("Sam", 150000);并验证它:CODE:alert(boss1.getSalary());   // 输出 200000alert(boss2.getSalary());   // 输出 100000alert(boss3.getSalary());   // 输出 150000

JS中允许的类型有Array, Boolean, Date, Enumerator, Error, Function, Number, Object, RegExp, String
可以在类型上使用proptotype来为类型添加行为。这些行为只能在类型的实例上体现。 prototype只能用在类型上

Object.prototype.pro = 1; Object.prototype.Method = function () {    alert(1); } var obj = new Object(); alert(obj.pro); obj.Method(); 

 

 

 

0 0
原创粉丝点击