日期:2014-05-16 浏览次数:20490 次
?
//------------------------------
//1.javascript对象创建的时候,构造函数会创建该对象的原型,对象会继承原
//型的所有方法和属性,即每个对象都连接到一个原型对象.
//
//2.所有通过字面量创建的对象都连接到Object.prototype这个标准的对象.
//
//3.当你创建某个对象时,你可以选择使用某个对象作为他的原型
//
//下面创建了一个可以是对象在创建时选择自己的原型
//------------------------------
var stooge={
first_name:'Hanks',
last_name:'tom'
}
if(typeof Object.beget!=='function')
{
Object.beget = function(o)
{
var F = function(){
this.constructor = arguments.callee
};
F.prototype = o;
return new F();
}
}
//创建了另一个对象,使用stooges作为原型
var another_stooge = Object.beget(stooge);
//查看对象的值
alert(another_stooge.first_name);//output:Hanks
//现在更改原型
stooge.first_name='Jack';
//查看原型的值
alert(stooge.first_name); //output:Jack
//查看对象的值
alert(another_stooge.first_name);//output:Jack
//现在更改对象
another_stooge.first_name='Michel';
//查看对象的值
alert(another_stooge.first_name);//output:Michel
//查看原型的值
alert(stooge.first_name);//output:Jack
//通过继承对象访问原型上的值
alert(another_stooge.constructor.prototype.first_name);
//对原型添加新的属性
stooge.middle_name='MoJce';
//查看对象的值
alert(another_stooge.middle_name);//output:MoJce
//----------------------------
//结论:对继承对象的更改并不会反应到原型上去,即更新不
//会影响原型连接上的值
//如果某个新的属性被添加到原型中,就会立刻反应到所有使用该原型创造的
//对象中
//----------------------------
//----------------------------
//属性检测,typeof检测手段可以检测到从原型上继承过来的属性,
//但hasOwnProperty却忽视了原型上的属性,只检测本对象拥有的
//属性
//----------------------------
alert(typeof flight01.number); //output:number
alert(typeof stooge.first_name);//output:string
alert(typeof another_stooge.first_name);//output:string
alert(flight01.hasOwnProperty('number'));//output:true
alert(another_stooge.hasOwnProperty('first_name'));//output:false