龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > Javascript编程 >

javascript学习笔记(五)原型和原型链详解(5)

时间:2014-10-13 15:04来源:网络整理 作者:网络 点击:
分享到:
再举个栗子: 复制代码 代码如下: script type="text/javascript" function Person(name) { this.name = name;//设置对象属性 }; Person.prototype.company = "Microsoft";//设置原型的属性

再举个栗子:

复制代码 代码如下:

<script type="text/javascript">
    function Person(name)
    {
        this.name = name;//设置对象属性
    };

    Person.prototype.company = "Microsoft";//设置原型的属性
    Person.prototype.SayHello = function() //原型的方法
    { 
        alert("Hello,I'm "+ this.name+ " of " + this.company);
    };

    var BillGates = new Person("BillGates");//创建person对象
    BillGates.SayHello();//继承了原型的内容,输出"Hello,I'm BillGates of Microsoft"

    var Jobs = new Person("Jobs");
    Jobs.company = "Apple";//设置自己的company属性,掩盖了原型的company属性
    Jobs.SayHello = function()
    {
        alert("Hi,"+this.name + " like " + this.company);
    };
    Jobs.SayHello();//自己覆盖的属性和方法,输出"Hi,Jobs like Apple"
    BillGates.SayHello();//Jobs的覆盖没有影响原型,BillGates还是照样输出
</script>

看下面一个原型链例子:

复制代码 代码如下:

<script type="text/javascript">
    function Year(){
        this.value = 21;
    }
    Year.prototype = {
        method:function(){

        }
    };

    function Hi(){

    };
    //设置Hi的prototype属性为Year的实例对象
    Hi.prototype = new Year();
    Hi.prototype.year = 'Hello World';

    Hi.prototype.constructor = Hi;

    var test = new Hi();//创建一个Hi的新实例

    //原型链
    test [Hi的实例]
        Hi.prototype [Year的实例]
            {year:'Hello World'}
            Year.prototype
                {method:……};
                object.prototype
                    {toString:...};

</script>

从上面例子中,test对象从Hi.prototype和Year.prototype中继承下来;因此他能访问Year的原型方法method,同时他能访问实例属性value

__ptoto__属性

__ptoto__属性(IE浏览器不支持)是实例指向原型对象的一个指针,它的作用就是指向构造函数的原型属性constructor,通过这两个属性,就可以访问原型里的属性和方法了。

Javascript中的对象实例本质上是由一系列的属性组成的,在这些属性中,有一个内部的不可见的特殊属性——__proto__,该属性的值指向该对象实例的原型,一个对象实例只拥有一个唯一的原型。

复制代码 代码如下:

<script type="text/javascript">
    function Box(){        //大写,代表构造函数
        Box.prototype.name = "trigkit4";//原型属性
        Box.prototype.age = "21";
        Box.prototype.run = function()//原型方法
        { 
            return this.name + this.age + 'studying';
        }
    }

    var box1 = new Box();
    var box2 = new Box();
    alert(box1.constructor);//构造属性,可以获取构造函数本身,
                            //作用是被原型指针定位,然后得到构造函数本身
</script>  

__proto__属性和prototype属性的区别

精彩图集

赞助商链接