首页 > 代码库 > js中关于prototype学习(2015年1月5号晚)

js中关于prototype学习(2015年1月5号晚)

prototype在js中为原型,只要是对象都有原型,最高原型为Object。

函数作为一特殊的对象,下面探讨prototype(原型)和function(函数)之间的关系。

function A (name){this.name = name;this.f1= function(){alert("这是A的对象方法,每个对象都可以调用"+this.name);}}A.fA=function (){alert("这是类方法,只用类可以调用,对象不可以调用");}//下面使B继承Afunction B (name){this.name = name;this.f2=function(){alert("这是B的对象的方法,每个对象都可以调用"+this.name);}}B.fB= function (){alert("这是B类的方法,对象不可调用");}//进行继承操作B.prototype = A;

下面分别进行调用测试:

1.只对于A函数进行测试:

var a = new A("hello");//创建一个A对象a//测试分别调用f1()和fA()方法a.f1();a.fA();

通过测试可以得出,只用f1()方法执行了,而fA()方法没有被执行。这种形式有点类似java中的类与对象、类方法和对象方法。

f1()是对象方法,只要是A的对象就有这种方法;fA()是类方法,只有类级别的才具用这种方法,此时正确调用方法为A.fA();

ps:类方法只用类可以调用,对象方法只用对象可以调用,类不能调用对象方法,对象不能调用类方法。

2.对B进行测试:

var b = new B("world");//创建B的对象b//用对象b,分调用f1(),fA(),f2(),fB()b.f1();b.fA();b.f2();b.fB();

对上面4中方法进行单条测试,通过测试可得出,只用方法fA()、f2()可以执行。

分析:在使用B.prototype=A;时就是声明对象B继承了对象A,这种继承只是继承了A中的fA(),应为fA()为类方法,

对于f2(),fB()前面已经说明完毕,

ps: prototype 在继承中只能继承类级别的方法和属性,不是去笼统的都继承。

js中关于prototype学习(2015年1月5号晚)