访问原型对象的函数属性时,报该属性‘is not a function’的错误?是new关键字没起实例化作用?
javascript代码如下:
var A = function() {
function Person(name) {
this.name = name;
}
var m = function() {
return "Hello " + this.name;
//return "Hello ";
};
Person.prototype.getGreeting = m;
return Person;
};
console.dir(A);
//代码1
//结果正常,无报错
//var B=A();
//console.log(new B("AAAA").getGreeting());
//代码2
//报错:1.js:43 Uncaught TypeError: (intermediate value).getGreeting is not a function
console.log(new A().getGreeting());
//代码3
//结果正常,无报错
console.log(new(new A())("AAAA").getGreeting());
//代码4
//结果正常,无报错
console.log(new(A())("AAAA").getGreeting());
调试过程中,发现报错部分(即代码2)中new A()
对象的原型prototype
其实是包含有getGreeting
这个属性值的。对以上代码有如下几个疑问:
1.new A()
生成的是什么?希望可以从深层次解答。
2.new A()
生成的对象和new(new A())("AAAA")
生成对象的区别?
3.代码1和代码3可看出new A()
和A()
貌似没有什么区别,为什么?
4.问题3new A()
和A()
如果确实是没区别的话,那就是new
关键字没有起实例化
作用,这该怎么理解?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
1、由于你return的并不是this这个实例。所以你的
new A()
和A()
结果一样。没有什么深层次,本来new 通过构造函数创建了一个实例this,默认返回的就是它,但这个返回值被你给篡改成了Person这个函数对象,就这么简单。2、通过1知道了
new A()
是Person
这个函数,然后new(new A())("AAAA")
简化一下,就是new (A())('aaaa')
,也就是new Person('aaaa')
;这差别就很明显了吧,一个是构造函数,一个构造函数的实例。3、同1的解释,this的指向问题。
4、this指向。
补充一点:
https://developer.mozilla.org...