javascript 容易忽略的小知识点 new到底做了什么?

问题:平时我们经常写 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 );

地球人都知道  打印结果是  javascript  容易忽略的小知识点 new到底做了什么?

接下来第二种情况

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 );

打印结果是 javascript  容易忽略的小知识点 new到底做了什么?

你可能也觉得这很正常,接下来请看

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)

补充: 对象字面量是不能直接找自己的原型的,它必须委托给它的构造器 ,然后构造器去找它的原型

上一篇:Python简单遍历字典及删除元素的方法


下一篇:移动端HTML5开发心得(转)