8. 两个重要的概念(二)
2.所有对象o都拥有一个隐藏的原型对象(在 FF中
是o.__proto__)。var fn = new Fn(),在FF下,
不考虑参数传递,可以用下面的代码来表示 new
的过程:
var o = {__proto__: Fn.prototype};
Fn.apply(o);
fn = o;
o.constructor === o.__proto__.constructor;
“反面”实例:
var SubClass.prototype = new BaseClass();
9. 传统的构造方式
var Person = function(name){
this.name = name;
this.say = function(){
return ‘I am’ + this.name;
}
}
var tom = new Person(‘Tom’);//Ok!
var jerry = Person(‘Jerry’);//没有new
1.Jerry is undefined;
2.在window上添加了name和say
10. 改进第一步
var Person = function(name){
var that = {};
that.name = name;
that.say = function(){
return ‘I am’ + this.name;
}
//构造函数默认的会返回this,但指定了return值后就返回该值了。
return that;
}
Person .prototype.run = function(){…};
var tom = Person(‘Tom’);
alert(tom.say);//I am Tom
alert(tom.run);//underfined
11. 再次改进(自身调用构造)
var Person = function(name){
if(this instanceof Person){
this.name = name;
this.say = function(){
return “I am” + that.name;
}
}else{
return new Person(name);
}
}
YUI3中YUI实例对象构造的方式