读书人

为什么结果是是undefined,其它两个变量

发布时间: 2013-03-21 10:08:17 作者: rapoo

为什么结果是是undefined,其它两个变量都正常,请教


function Base() {}

Base.extend = function(obj) {
//顶级构造
var Class = obj['constructor'];
//解析传入的对象实现构造函数
for(var i in obj) {
if(i != "constructor") {
Class.prototype[i] = obj[i];
}
}

Class.extend = function(objChild) {
var ChildClass = objChild['constructor'];

//继承父类的prototype方法
ChildClass.prototype = this.prototype;

//提供base方法调用父类的构造
ChildClass.prototype.base = function() {
obj['constructor'].apply(this, arguments)
}

//解析传入的对象实现构造函数
for(var k in objChild) {
if(k != "constructor") {
ChildClass.prototype[k] = objChild[k];
}
}

//子类的子类也有继承的特性
ChildClass.extend = Class.extend;

return ChildClass;

}
return Class;
}

var Person = Base.extend({
constructor: function(name) {
this.name = name;
},
getName : function() {
return this.name;
}
});

var User = Person.extend({
constructor: function(name, password) {
this.base(name);
this.password = password;
},
getPassword : function() {
return this.password;
}

});

var ArchiveUser = User.extend({
constructor: function(name, password, isAdmin) {
this.base(name, password);
this.isAdmin = isAdmin;
},
getAdmin : function() {
return this.isAdmin;
}
});


var archiveUser = new ArchiveUser("Jack", "123", 1);

alert(archiveUser.getPassword());
constructor function prototype javascript
[解决办法]
21行代码有问题。

obj['constructor'].apply(this, arguments);

这里的obj['constructor']是你顶级构造的那个构造函数,就是你代码里的Person

所以不会执行User的构造函数。

所以也就不会有password属性了
[解决办法]
改了一下,这样就出来了,不知道跟你想要的是一样东西么。

function Base() {}

Base.extend = function(obj) {
//顶级构造
var Class = obj['constructor'];
//解析传入的对象实现构造函数
for(var i in obj) {
if(i != "constructor") {
Class.prototype[i] = obj[i];
}
}
Class.parent = Base;


Class.prototype.base = Class;
Class.extend = function(objChild) {
var ChildClass = objChild['constructor'];
ChildClass.parent = this;
//继承父类的prototype方法
ChildClass.prototype = this.prototype;

//解析传入的对象实现构造函数
for(var k in objChild) {
if(k != "constructor") {
ChildClass.prototype[k] = objChild[k];
}
}

//子类的子类也有继承的特性
ChildClass.extend = function(){
return Class.extend.apply(this,arguments);
}

return ChildClass;

}
return Class;
}

var Person = Base.extend({
constructor: function(name) {
this.name = name;
},
getName : function() {
return this.name;
}
});

var User = Person.extend({
constructor: function(name, password) {
User.parent.call(this,name);
this.password = password;
},
getPassword : function() {
return this.password;
}

});

var ArchiveUser = User.extend({


constructor: function(name, password, isAdmin) {
ArchiveUser.parent.call(this,name,password);
this.isAdmin = isAdmin;
},
getAdmin : function() {
return this.isAdmin;
}
});
console.log(Person.parent.toString())
console.log(User.parent.toString())
console.log(ArchiveUser.parent.toString())
var archiveUser = new ArchiveUser("Jack", "123", 1);
console.log(archiveUser);


读书人网 >JavaScript

热点推荐