作业帮 > 综合 > 作业

javascript中 F.prototype=obj和F.prototype=obj.prototype有什么区别?

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/04/30 00:12:18
javascript中 F.prototype=obj和F.prototype=obj.prototype有什么区别?
在原型式继承中,传入的对象作为构造函数的原型,在寄生组合式继承传入的是个对象的原型,就有点搞不清楚了,可能问题描述的还不是很清楚,多包涵. 希望能画张图解释这个
都是对prototype的赋值,语义上没什么区别.差别在于对属性、方法的检索上,javascript的对象属性、方法的搜寻的过程是:
1、对象本身
2、对象prototype
3、对象prototype的prototype,类推.
javascript类的基础的处理上,一般有两种方式,一种引用原型的方式,另外是复制原型的方式,差别从名称上就能看出来,引用原型是直接引用父类的原型:
Function.prototype.classExtends = function ()
{
var F = function() { };
var class = new F();
class.prototype = this.prototype;
class.prototype.Super = this;
class.prototype.constructor = this;
return class;
}
function classA() {
};
var classB = classA.classExtends();
复制原型比较简单,是从父类的prototype复制所有的方法、属性到派生类的prototype,派生类和基类的prototype没有直接的引用关系,这部分就不给代码了.
再问: 还是给您看代码,superType.prototype赋值给了Object(),就出现了f.prototype=superType.prototype ,如果赋值给Object()的是superType,最后实例化后输出继承类属性是undefined,我想知道这个里面的内部运行机制
再答: 一般create用来返回类的实例,你这里用来做继承关系的处理,感觉有点怪异。 说说代码里面的问题: create里面的object()的参数,应该是new superType(),不应该是superType.pototype; 还有,原型法的继承方式,是不能假定构造方法的,也就是说在SubType函数中,不应该使用SuperType.call来调用基类的构造,原型法的继承方式,一般是不带构造参数的,这本来就是原型法继承方式的一个缺陷。
再问: create函数名的问题我记下了 。 至于代码的问题,是没错的,这个是javascript高级程序设计章节中“寄生组合式继承”的示例代码,这个里面就是直接用的superType.prototype传递的参数 ,所以产生问题。用SuperType.call来调用基类的构造,就是为了解决子类型构造函数中向超类型构造函数传递参数。
再问: javascript高级程序设计