w.x

面向对象

  1. 对象属性:数据属性和访问器属性;

数据属性:

Configurable:表示能否通过delete删除属性,

Enumberable:表示能否同过for-in循环返回属性;

Value:包含这个属性的值;

Writable表示能否修改属性的值;

方法:Object.defineProperty(); ie8一下不建议试用;

访问器属性:

  1. 创建对象

构造函数:按照惯例,构造函数始终应该以一个大写字母开头;

创造实例,必须试用new 操作符;

    实例中都存在constructor属性,指向构造函数;

(注:多有对象都继承object, 所有实例也是object实例     instanceof);

 

构造函数作为普通函数调用,this为window;

3、原型模式:

   创建一个新函数,函数就有prototype 属性,指向原型对象;

   所有原型对象会自动获得一个constructor属性,属性指向prototype所在的函数指针;

   IsprototypeOf();

//检测原型和实例是否存在关系 xx.prototype.isprototype(实例)-返回true,false;

Object.getPrototypeOf(实例);

//获取实例的原型  Object.getprototypeOf(实例) 返回原型对象;

兼容Ie9+

 

实例无法不能重写原型中的值,实例中出现同名的属性,会屏蔽原型中的属性;

例:

var person=function()

         {};

         person.prototype.name='wangxiao';

         var person1=new person();

         var person2=new person();

        

         person1.name="xxxx";

         alert(person1.name);//'xxxx'

        alert(person2.name);//'wangxiao';

 

方法:hasOwnpropertype();检测是否是实例的属性;

     var person=function()

         {};

         person.prototype.name='wangxiao';

         var person1=new person();

         var person2=new person();

        

         person1.name="xxxx";

        

         alert(person1.hasOwnProperty("name"));//true;person1自身的属性

         alert(person2.hasOwnProperty('name'));//false;来自原型属性;

 

原型与in;

    单独使用,in操作符会在通过对象能访问属性时返回true;

    ‘name’ in person1;

   

    For-in循环中;

     规定返回能够通过对象访问,可枚举的属性,不可枚举的属性屏蔽(包括原型中的属性);所有开发人员定义的属性都是可枚举的;

     方法:Object.keys();//返回对象的可枚举属性;

           Object.getOwnProtpertypeNames();//访问对象所有的属性(包括不可枚举的);

      兼容ie9+等;

  简单原型写法;

     var person=function(){

            this.name="wangxiao";

        };

        person.prototype={

             age:'男',

             like="xx"

        };

    问题:重新了原型,constructor指向object;

    var person=function(){

            this.name="wangxiao";

        };

        person.prototype={

        constructor:person,

             age:'男',

             like="xx"

        };

 原型的动态性:

     选型对象的任何修改会立即体现在是所有实例中;

     例子:

      Var  firend=new person();

      Person.ptototype.sayName=function(){  alert(‘xx’)  }

        Firend.sayName();//’xx’;

 

  原型对象的问题:

       Person.prototype.obj={}/[];

       造成引用问题;

       处理方式; 构造器原型组合模式       

       Var  firend=new person(

      This.obj={};

);

 

posted on 2017-03-21 15:42  w.x  阅读(101)  评论(0)    收藏  举报