美文网首页
javaScript中的面向对象思想之原型

javaScript中的面向对象思想之原型

作者: 开韦 | 来源:发表于2017-04-21 13:08 被阅读0次

    二、js的原型
    1、原型的概念
    原型是构造函数在js代码编译阶段,由系统为我们创建出来的一个对象;原型原型可以给系统构造函
    数添加相关的方法和属性,这样所有该类型的对象就可以调用这些自定义的方法和属性,也可以用来再创
    建自定义对象时,把共有的属性和方法挂载在原型上,已达到节约内存的目的
    例如给系统构造函数(数组)添加自定义方法,js代码如下:
    <script type="text/javascript">
    Array.prototype.sumArr=function(){
    var sum=0;
    for(var index=0;index<this.length ;index++){
    sum+=this[index];
    }
    return sum;
    }
    var arr=[1,2,3,4];
    var add=arr.sumArr();
    console.log(add);
    </script>

    2、使用原型创建对象
    <script type="text/javascript">
    //使用原型的形式创建对象,是基于构造函数的
    function CreatePerson(name,age){
    //在构造函数中添加实例属性,实例方法
    //这些实例属性和方法是各个对象之间不同属性方法
    this.name=name;
    this.age=age;
    };
    //在函数外部添加原型方法属性
    CreatePerson.prototype.sayHi=function(){
    alert('hello'+this.name);
    };
    //注意:一般情况下 我们把属性设置为实例的 把方法设置为原型的
    var per1=new CreatePerson('xiaoQuan',18);
    console.log(per1);
    </script>

    3、原型对象与in操作符
    in操作符除了在for-in循环中使用外,还可以单独使用,在单独使用时,in操作符用来判断该对象是否
    能访问指定的属性、方法,返回值是个布尔类型的值,若该对象能访问指定的属性或方法则返回的是true,
    否则返回的是false。
    <script type="text/javascript">
    function CreatePerson(name,age){
    this.name=name;
    this.age=age;
    };
    CreatePerson.prototype.sayHi=function(){
    alert('hello'+this.name);
    };
    var per1=new CreatePerson('xiaoQuan',18);
    //判断per1对象能否访问到sayHi这种方法
    val bol = 'sayHi' in per1;
    console.log(bol);//true
    </script>

    4、原型对象的hasOwnProperty方法
    该方法是用来判断指定的属性或方法是否是是属于实例的,返回值也是一个布尔类型的值,若指定的属
    性或方法是属于实例的返回的是true,否则返回的是false。
    <script type="text/javascript">
    function CreatePerson(name,age){
    this.name=name;
    this.age=age;
    };
    CreatePerson.prototype.sayHi=function(){
    alert('hello'+this.name);
    };
    var per1=new CreatePerson('xiaoQuan',18);
    //判断sayHi方法是否属于实例中的方法
    val bol1 = per1.hasOwnProperty('sayHi');
    console.log(bol1);//false
    //判断name属性是否属于实例中的属性
    var bol2=per1.hasOwnProperty('name');
    console.log(bol2);//true
    </script>
    自定义一个方法用来判断指定的方法和属性是否属于原型中的
    第一种方法:
    <script type="text/javascript">
    function CreatePerson(name,age){
    this.name=name;
    this.age=age;
    };
    CreatePerson.prototype.sayHi=function(){
    alert('hello'+this.name);
    };
    var per1=new CreatePerson('xiaoQuan',18);
    Object.prototype.isPrototype = function (attr){
    if (attr in this) {
    if (this.hasOwnProperty(attr)) {
    return false;
    } else {
    return true;
    }
    } else {
    return null;
    }
    };
    var bol = per1.isPrototype('gender');
    console.log(bol);//null
    </script>
    第二种方法:
    <script type="text/javascript">
    function CreatePerson(name,age){
    this.name=name;
    this.age=age;
    };
    CreatePerson.prototype.sayHi=function(){
    alert('hello'+this.name);
    };
    var per1=new CreatePerson('xiaoQuan',18);
    Object.prototype.isPrototype = function (attr){
    return !this.hasOwnProperty(attr)&&(attr in this);
    };
    var bol = per1.isPrototype('gender');
    console.log(bol);//null
    </script>

    5、解决字面量对象的归属问题
    <script type="text/javascript">
    function CreatePerson() = {};
    CreatePerson.prototype={
    //constructor属性将CreatePerson的prototype指向CreatePerson;
    constructor:CreatePerson,
    name:'xiaoXuan',
    age:18
    };
    var per=new CreatePerson();
    </script>

    相关文章

      网友评论

          本文标题:javaScript中的面向对象思想之原型

          本文链接:https://www.haomeiwen.com/subject/kgddzttx.html