zoukankan      html  css  js  c++  java
  • JavaScript的原型

    //回顾构造函数
    function Box(name, age) {
            this.name = name;                 //实例属性
            this.age = age;
            this.run = function() {           //实例方法
                return this.name + this.age;
            }
        }
    

      

    //原型
            function Box() {}                   //构造函数体内什么都没有,如果有就是实例属性或者实例方法
            Box.prototype.name = 'Lee';         //原型属性
            Box.prototype.age = 100;            //原型属性
            Box.prototype.run = function () {   //原型方法
                return this.name + this.age;
            };
            var box1 = new Box();
            var box2 = new Box();
            alert(box1.name);                   //Lee
            alert(box1.age);                    //100
            alert(box1.run());                  //run是一个方法,run()是一个值
    

      

     
            function Box() {}                   //构造函数体内什么都没有,如果有就是实例属性或者实例方法
            Box.prototype.name = 'Lee';         //原型属性
            Box.prototype.age = 100;            //原型属性
            Box.prototype.run = function () {   //原型方法
                return this.name + this.age;
            };
            var box1 = new Box();
            var box2 = new Box();
    
    
            //原型属性和实例属性的区别是共享,共享保持一致,
            //如果是实例方法,不同的实例化,他们的方法地址是唯一的不一样的
            //如果是原型方法,那么他们的地址是共享的,大家都一样
            alert(box1.run == box2.run);        //true,说明是地址共享的。
            alert(box1.__proto__);              //访问的是一个指针,指向prototype原型对象
            alert(box1.constructor);            //构造属性,可以获取构造函数本身
                                                //作用是被原型指针定位,,然后得到构造函数本身
                                                  //其实就是对象实例对应的原型对象的作用
                                                  //IE浏览器不能访问,但是别的浏览器虽然能访问却不能获取内部信息
                                                  //返回的是[object,object];
    

      

    删除实例中的属性
    delete box1.name;                   //删除实例中的属性
            alert(box1.name);           //Lee,本来是jack,因为实例中的属性删除了所以为Lee;
    

      

    覆盖原型中的属性
     Box.prototype.name = 'LLL';         //覆盖原型中的属性;
            alert(box1.name);            //LLL覆盖原型中的属性;
    

      

    hasOwnProperty()判断属性是在实例中
    alert(box1.hasOwnProperty('name'));     //false;说明属性不在实例中
            box1.name = 'j';
            alert(box1.hasOwnProperty('name'));//true;说明属性在实例中
    

      判断只有在原型中的属性

    //只有原型中的属性
            function isProperty(object, protety) {
               return !object.hasOwnProperty(protety) && (protety in object)
            }
            alert(isProperty(box1, 'name'));//true,此刻就原型中有属性name,所以是true,如果
                                            //把原型中的name删除,那么就是false
            box1.name = 'hello';
            alert(isProperty(box1, 'name'));//false,因为isProperty这个函数是判断原型中是否有name
                                            //属性,此刻实例中给了box1的一个name属性
    

      有错误希望能帮我提出来,我会改正

  • 相关阅读:
    TensorFlow设置GPU占用量
    与服务器同步工程(expect脚本)
    C/C++中#pragma once的使用
    sublime text 3 快捷键大全
    Sublime Text 3 注册码
    如何用diff比较两个文件夹下的内容
    Error in building opencv with ffmpeg
    opencv: Rotate image by 90, 180 or 270 degrees
    初识HTTPS
    Unity3D之Mecanim动画系统学习笔记(十一):高级功能应用
  • 原文地址:https://www.cnblogs.com/shenq/p/5452538.html
Copyright © 2011-2022 走看看