function a() { this.Age = "20"; this.aa = function () { alert(this.Age); } }
function b() { this.Name = "Xiao"; this.alertName = function () { alert(this.Name); } }
b.prototype =new a;
alert(c.aa());
首先第一问题是为什么这里会弹框两次,第一次为20,第二次为undefined我将代码改为:
function a() { this.Age = "20"; this.aa = function () { alert(this.Age); } }
function b() { this.Name = "Xiao"; this.alertName = function () { alert(this.Name); } }
b.prototype =new a.prototype;
alert(c.aa());
运行没有任何反应, 这是为什么?alert(c.Name);也没有任何反应,但是代码提示器会提示有Name这个属性
问题:
b.prototype指的是什么?它跟b有什么关系?
b.prototype =new a; 对b有什么影响?
b.prototype.constructor指的是什么?
b.constructor指的是什么?这几天看js的面向对象看得头都晕了,一直没弄明白prototype,求高手解答prototypeconstructorjavascriptJSjs
function b() { this.Name = "Xiao"; this.alertName = function () { alert(this.Name); } }
b.prototype =new a;
alert(c.aa());
首先第一问题是为什么这里会弹框两次,第一次为20,第二次为undefined我将代码改为:
function a() { this.Age = "20"; this.aa = function () { alert(this.Age); } }
function b() { this.Name = "Xiao"; this.alertName = function () { alert(this.Name); } }
b.prototype =new a.prototype;
alert(c.aa());
运行没有任何反应, 这是为什么?alert(c.Name);也没有任何反应,但是代码提示器会提示有Name这个属性
问题:
b.prototype指的是什么?它跟b有什么关系?
b.prototype =new a; 对b有什么影响?
b.prototype.constructor指的是什么?
b.constructor指的是什么?这几天看js的面向对象看得头都晕了,一直没弄明白prototype,求高手解答prototypeconstructorjavascriptJSjs
第二次是undefined是因为aa()函数没有返回值,所以undefinedb.prototype指的是什么?它跟b有什么关系?
b.prototype一般用来给b的实例添加成员函数,属性也可以,但是引用型的就不建议用prototype添加。跟b冒似没有什么关系,跟b的实例有关系。b.prototype =new a; 对b有什么影响?
将实例a上的成员绑定要b的原型链上,这样new 出来的b实例类似继承了a了一样,拥有了a的成员。b.prototype.constructor指的是什么?
这个一般是在使用了b.prototype = {
showName:function(){
//
}....
};后b实例的constructor会指向object对象,为了保证constructor的有效性,一般会用b.prototype.constructor = b;来重新指定一个构造函数。b.constructor指的是什么?
function A(){}
var b = new A();
如果是这种情况的话,constructor属性是实例的构造函数,b的构造函数是A,所以b.constructor就是A。
alert(b.constructor===A);//truefunction b(){
}
如果这种情况的话,那么b.constructor就是Function
这个哪种属于引用型啊?
b.prototype =new a,这个不是一个赋值操作吗?之前的原型链上的东西还在吗?
2.这是赋值操作,原先原型链上的东西理所当然没了,事实上这一句是继承作用,可以让b类拥有a类的成员,不过这种继承方式不推荐
3,4.constructor指向构造对象的函数,比如var c=new b();那么c.constructor等于b.prototype.constructor等于b;不过该成员可以被修改prototype是js面向对象中的一个基础机制(注意:基础不是说它简单,是说它的重要性,不能理解这个就是还没有理解,呵呵),所以要在理解js面向对象机制的基础上才能真正理解它,反过来同样成立,理解它才能真正掌握js面向对象,
所以不要着急,先好好打基础,
至于constructor不用理会它,基本上你不会用到
js对象模型是集合
js访问对象成员时,先从对象本身查找成员,若有,则访问该成员
若无,从其构造函数原型链上查找,若有,则访问该成员,
若对象及原型链上都无,则为undefined未能理解的话就是基础还未到
倒是alert(c.aa());这里的错误要先解决了。
一个是你c在那里定义了?
二个是c.aa()里没有返回值,你alter做什么
三是alert(c.aa()) 弹一次,c.aa()里面弹一次。
你今晚先搞清楚这三条先去睡觉吧。
function a() { this.Age = "20"; this.aa = function () { alert(this.Age); } }
function b() { this.Name = "Xiao"; this.alertName = function () { alert(this.Name); } }
b.prototype = new a;
var c = new b;
为什么c能访问a和b的成员啊
b的原型链不是已经被修改了吗
var c=new b;这句漏掉了。
c的原型是b.prototype吗?
c继承的是b的原型链上的东西?
更新时间: 2012 年 11 月 22 日 JavaScript new fun的执行过程
(1)创建一个新的对象,并让this指针指向它;
(2)将函数的prototype对象的所有成员都赋给这个新对象;
(3)执行函数体,对这个对象进行初始化操作;
(4)返回(1)中创建的对象。貌似还有个复杂版的,忘记在那里看见过了。
prototype是Function类的成员,a,b都是函数,所以会有这两个成员,至于prototype的作用如我在4楼所说.
c是对象,不是函数,所以没有prototype成员.
至于c可以访问b的成员,因为c是b类的对象/实例,这个问题说明你面向对象的基本概念都搞不清楚.
为什么可以能访问a的成员,因为b.prototype=new a();这句类似继承,给b的原型链上添加了a的成员,b的原型链当然是被修改了,但仔细理解我在4楼说的成员访问过程,原型链上的成员与对象自身成员是分离的,构造函数中this.xxx=xxx会把成员添加到对象本身而不是原型链上,对象c构造时b函数给c添加了一些成员,同样根据我4楼描述的过程,c还可以访问b.prototype上的成员,而b.prototype上的成员就是用a函数添加的,所以c能访问b,a中的成员
感觉你还是不要急着学js面向对象了,先补一补通用的面向对象知识,类与类的实例,类的构造函数...
a为Function.prototype的对象,a.protoype为a的原型,当创建一个a的对象时,a的对象会通过a的构造函数复制a的内部成员;
a.prototype为a对象的公共区域,a的所有对象都可以访问;
b.prototype=new a; 是将b的原型链上存放一个a的对象,所以b的对象也能够访问a的原型链上的东西;
b的对象在访问一个属性时先从自身内部找起,然后再从b.prototype、a.prototype、Function.prototype最后到Object.prototype,没有就返回undefined是不是可以这样理解?