function sub(options){
options = options || {};
this.options ={
name : options.name || 'john',
age : options.age || '18'
}
this.init();
}
sub.prototype ={
constructor:sub,
init:function(){
this.getName();
this.getAge();
},
getName :function(){
sub.prototype.getAge();
},
getAge : function(){
console.log('age:'+this.options.age); //在getAge这个函数里面怎么取到构造函数sub里面的options值啊
var ageObj ={
init : function(){
//console.log('this is age');
//console.log('age:'+this.options.age);
}
}
ageObj.init();
}
}
new sub({
name : 'lily',
age : '20'
});
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
这样不行吗?
亲测可行
你那个getName方法中的getAge错了,不应该是prototype对象,应该是这个对象本身
这样根本取不到吧,你应该在构造函数里取原型中的方法,子类sub可以获取到父类sub.prototype的方法和属性,父级肯定取不到子的
重新设计下代码吧
问题出在这里
sub.prototype.getAge();这句表示你把getAge()方法当做普通函数调用了,这样就脱离了原型继承,这个方法又是需要有值的,很显然你这里没有传任何的参数,当然获取不到age,改成这样就行了
// obj通过原型链调用方法getAge(), getAge()中的this应用隐式绑定规则被绑定到上下文对象obj
我觉得主要是逻辑上面有问题。
X.prototype是X的父对象,所以有X.prototype的时候,还没有X呢,更没什么X.options,那X.prototype怎么好用这个options呢?在X.prototype的世界里根本就不应该有这个options,所以不应该出现在X.prototype的内容里。
如果把options作为X.prototype的一个属性就比较自然了。
问题已经解决了,这样的确取不到值,换了种调用方法就好了