填写内容让下面代码支持a.name = “name1”; b.name = “name2”;
function obj(name){
1
}
obj.2= "name2";
var a = obj("name1");
var b = new obj;
//创建全局函数 function obj(name){ if(name){ this.name = name; } return this;//返回this引用 } obj.prototype.name = "name2";//设置原型对象 var a = obj("name1");//直接调用函数,this等于window,a等于window。 var b = new obj;//等价于var b = new obj();调用函数实例化对象,this指向obj。
就是关于《JS高程》中创建对象的两种方式的应用。一种为构造函数模式,另一种为原型模式。
本题中,为了使a,b的name属性值不同,需要通过在构造函数增加判断,如果有参数传入,则采用构造函数模式,
function obj(name){ var o=new Object(); o.name=name; return o; } obj.prototype.name='name2'; a.obj('name1');
因为实例中已经定义了name属性值,所以将原型中的覆盖掉了,a.name=='name1'如果没有参数传入,实际则为下列形式
function obj(name){ } obj.prototype.name='name2'; var b=new obj;
根据原型模式,易知b.name=='name2'
function obj(name){ //if(name){ this.name = name; //} return this; }输出的b.name的结果是undefined,并不会沿着原型链找到“name2”。