javascript 理解对象原型(一)

本文深入探讨JavaScript中对象创建时的原型机制,解释构造函数如何创建对象原型,以及通过字面量创建的对象如何默认连接到Object.prototype。进一步阐述如何自定义对象原型,并通过实例演示对象之间的原型连接和属性访问。最后,介绍属性检测方法的区别,强调原型属性的不可变性和对象属性的独立性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

            //------------------------------------------------------------------
            //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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值