function Pet(words)是Pet类型的构造函数,Pet.call(this, words)就是用传递的this值,也就是Dog类型,来替换Pet构造函数中的this,使Dog类型的构造函数继承了Pet类型的构造函数,就可以获得其中的words属性和speak函数,所以Dog实例化出的dog对象可以使用Pet类型上的speak函数
function Person() - Function.prototype-Object.prototype-null
son -Person.prototype -Object.prototype -null
可以正常执行输出,仔细查一下你的代码是否有错误
我自己搞明白了~~~
我感觉是这样的,按老师写的不能成功。加上.prototype就好了,感觉之前用的没区别,就是设置了直接调用函数报错。
举一个更简洁的例子:
function A() { this.name = "111" //这里的this,称为this1 } function B() { A.call(this) //这里发生了:1、执行了构造函数A 2、用这个this(称为this2)替换了A()上面的this; } // this2.name="111" 执行了A()可以看成这样 var b = new B(); //执行到这里,1、B()里面的this2确定了,就是指向new B(),也就是B; alert(b.name)
如果感觉似懂非懂,再看这个:
function A() { this.name = "111" } function B() { this.name = "222" } var b = new B(); (function c() { //c是个自执行函数 A.call(b) //执行A函数,用b去代替A里面的this, 因此A里面的语句可以看成:b.name="111" })() alert(b.name)
重载就是一组具有相同名字、不同参数列表的函数(方法)。
作者: visor_03389873
链接:http://www.imooc.com/article/8621
来源:慕课网
typeof Base// "function"
typeof Base.prototype //"object"
相当于把{func:func, prop,prop }这个对象赋值给了ModuleA,可以通过ModuleA.func来访问属性
DetectorBase.detect这样写继承与它的之类调不到detect方法啊
我觉得理论上你这么写没毛病,因为只要传入的是个对象就可以,prototype也是个对象,不谈这个例子,你这么写虽然不会报错,但是实现不了咱们想要的功能
抽象类根本也是基于原型链的模拟实现,这个是不可以继承的
Person.call()确实是调用基类,Person.prototype.init.apply(this,arguments)这个是调用子类。
你上面给DetectorBase.detect = func.....
只是给DetectorBase这个function对象赋予了 方法,而不是给DetectorBase(或者说是子类的实例)的实例赋予了方法,如果想给实例赋予方法 必须写成 DetectorBase.prototype.detect = function......
Java的抽象類也不能調用,但是它給予子類如何繼承提供了指導。
好详细。。。。。。