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
关键字没有起实例化
作用,这该怎么理解?
相关分类