问题:平时我们经常写 var ss = new Person();ss就是一个由’Person类‘生成的对象了,可是我们的Person方法里却没有写 return;
(var ss= Person(); 返回的是undefined 因为 方法内没有写return)
先来一段普通代码
function Person( name ){ this.name = name; //return this; }; Person.prototype.getName = function(){ return this.name; }; var ss= new Person(22); console.log( ss );
地球人都知道 打印结果是
接下来第二种情况
var obj= new Object(); function Person( name ){ this.name = name; return this; }; Person.prototype.getName = function(){ return this.name; }; var ss= Person.apply(obj); console.log( ss );
打印结果是
你可能也觉得这很正常,接下来请看
var obj= new Object(); function Person( name ){ this.name = name; // return this; }; Person.prototype.getName = function(){ return this.name; }; var ss= Person.apply(obj); console.log( ss );
打印结果是--undefined
由此 我们可以得出结论:
1 javascript 没有类的概念, 一定要切记,不要受其他基于类的语言影响(如java),认为对象一定是由类创建来的,函数是一等对象
2 new 关键字 我们可以认为做了以下几件事情
var ss = (function(Person){ var obj = new Object();//new 一个object对象--才发现这里也用到了new……这个怎么解释……靠 我还木有研究啊 obj.__proto__ = Person.prototype;//对象的原型指向Person的原型 var ret = Constructor.apply( obj, arguments );//this--指向obj return typeof ret === ‘object‘ ? ret : obj;//如果Person函数有return则返回ret,否则返回obj })(Person)
补充: 对象字面量是不能直接找自己的原型的,它必须委托给它的构造器 ,然后构造器去找它的原型
时间: 2024-12-27 04:09:22