function TestClass(){
this.property = true;
}
TestClass.prototype.getFatherValue = function(){
return this.property;
};
var test = new TestClass();
window.alert(test.prototype.getFatherValue());
问题:
在TestClass的原型对象中添加了getValue()方法,为什么无法通过原型来访问这个方法(即test.prototype.getValue()无效),而只能通过test.getValue()来调用。小弟刚接触javascript,望各位大神指点。
6 个解决方案
#1
那你想让this指向哪阿?
function TestClass(){
this.property = true;
}
TestClass.prototype.getFatherValue = function(){
return this.property;
};
var test = new TestClass();
window.alert(test.constructor.prototype.getFatherValue.call(test));
function TestClass(){
this.property = true;
}
TestClass.prototype.getFatherValue = function(){
return this.property;
};
var test = new TestClass();
window.alert(test.constructor.prototype.getFatherValue.call(test));
#2
this不是指向TestClass吗?上面的getValue()方法写错了,应该是getFatherValue()。prototype是test的原型,getFatherValue()在prototype中,按道理是可以通过test.prototype.getFatherValue()来访问的。
#3
用调试器吧。
只有用调试器才理的清。
只有用调试器才理的清。
#4
举个简单的例子:TestClass是你师父,getFatherValue是你师父赚钱的能力。
你师父教会你赚钱的能力 test = new TestClass(); 但你不能直接去拿你师父的钱:test.prototype.getFaterValue,你得自己去拿钱。test.getFatherValue。而且根据js的规则,你想再找个徒弟,那需要经过多次的处理。一般叫继承。
这是一条js语法规则,这样做的目的,就是为了编程完全不能让实例化的对象test直接去改变父类的getFatherValue的方法。
这是我个人的理解,更管方的参考上面的图,或javascript高级程序设计 第三版 148页 理解原型对象。
#5
这里再次感叹一下,回答问题的不易。自己明白,想让别人明白,是需要化一点心思或时间来反推这个过程。如何站在别人的角度去让他明白这个原理是比较困难或有挑战性的。
#6
谢谢大家的指教,根据大家的答案和参考javascript高级程序设计,总结如下:
1.prototype属性是构造函数(TestClass())的属性,实例test没有prototype属性。
2.实例有一个指针[[prototype]]指向构造函数的prototype。
3.可以通过两种方法访问构造函数的prototype:通过test的proto属性和Object.getPrototypeOf(test)
1.prototype属性是构造函数(TestClass())的属性,实例test没有prototype属性。
2.实例有一个指针[[prototype]]指向构造函数的prototype。
3.可以通过两种方法访问构造函数的prototype:通过test的proto属性和Object.getPrototypeOf(test)
#1
那你想让this指向哪阿?
function TestClass(){
this.property = true;
}
TestClass.prototype.getFatherValue = function(){
return this.property;
};
var test = new TestClass();
window.alert(test.constructor.prototype.getFatherValue.call(test));
function TestClass(){
this.property = true;
}
TestClass.prototype.getFatherValue = function(){
return this.property;
};
var test = new TestClass();
window.alert(test.constructor.prototype.getFatherValue.call(test));
#2
this不是指向TestClass吗?上面的getValue()方法写错了,应该是getFatherValue()。prototype是test的原型,getFatherValue()在prototype中,按道理是可以通过test.prototype.getFatherValue()来访问的。
#3
用调试器吧。
只有用调试器才理的清。
只有用调试器才理的清。
#4
举个简单的例子:TestClass是你师父,getFatherValue是你师父赚钱的能力。
你师父教会你赚钱的能力 test = new TestClass(); 但你不能直接去拿你师父的钱:test.prototype.getFaterValue,你得自己去拿钱。test.getFatherValue。而且根据js的规则,你想再找个徒弟,那需要经过多次的处理。一般叫继承。
这是一条js语法规则,这样做的目的,就是为了编程完全不能让实例化的对象test直接去改变父类的getFatherValue的方法。
这是我个人的理解,更管方的参考上面的图,或javascript高级程序设计 第三版 148页 理解原型对象。
#5
这里再次感叹一下,回答问题的不易。自己明白,想让别人明白,是需要化一点心思或时间来反推这个过程。如何站在别人的角度去让他明白这个原理是比较困难或有挑战性的。
#6
谢谢大家的指教,根据大家的答案和参考javascript高级程序设计,总结如下:
1.prototype属性是构造函数(TestClass())的属性,实例test没有prototype属性。
2.实例有一个指针[[prototype]]指向构造函数的prototype。
3.可以通过两种方法访问构造函数的prototype:通过test的proto属性和Object.getPrototypeOf(test)
1.prototype属性是构造函数(TestClass())的属性,实例test没有prototype属性。
2.实例有一个指针[[prototype]]指向构造函数的prototype。
3.可以通过两种方法访问构造函数的prototype:通过test的proto属性和Object.getPrototypeOf(test)