zoukankan      html  css  js  c++  java
  • 面向对象--原型

    面向对象--原型

    1.面向对象(oop)

    1.内置对象
    //构造函数function Array(){}  //由于window内置了所以不用写直接实例化就好了
    //Array是内置对象
    var arr1 = new Array(1,2,3); 
    var arr2 = new Array(4,5,6);
    
    alert(arr1.constructor); //constructor可以获取实例对象的构造函数
    alert(arr1.push == arr2.push) //true  //这里可以说明他们共用一个方法
    
    //构造函数的特点:首字母大写,new关键字就行调用,this指向实例对象
    2.构造函数实现面向对象
    function Abc(name){
    	this.name = name;
    	this.showname = function(){
    		return this.name
    	}
    }
    
    var a1 = new Abc('zhangsan');
    var a2 = new Abc('wangwu');
    alert(a1.showname()) //输出zhangsan
    alert(a1.showname == a2.showname) //false 此时不在是同一个方法 为什么呢?
    
    

    构造函数的弊端:每一个方法对实例来说,都要重新创建一次,构造函数内部的属性和方法都是私有的。

    总结:系统内置对象的构造函数的实例对象的方法都是同一个方法

    ​ 我们自己构造函数的实例对象的方法就不是同一个方法

    真正的面向对象:混合开发(构造函数+原型)

    构造函数来说:内部的属性和方法都是不同的

    内置对象:内部的属性方法都是相同的

    //构造函数
    function Abc(name){   //构造函数内部的属性和方法都是不同的,私有的
    	this.name = name;
    	this.showname = function(){
    		return this.name
    	}
    }
    

    原型

    原型:约定每一函数都有一个原型(prototype属性对象),内部放置的是公有的属性和方法,原型内部的this依然指向实例对象

    function Abc(name){   
    	this.name = name;
    	this.showname = function(){
    		return this.name
    	}
    }
    
    Abc.prototype.showname = function(){
    	return this.name;
    }
    var a1 = new Abc('zhangsan');
    var a2 = new Abc('wangwu');
    
    //就在这个时候突然发现  //alert(a1.showname == a2.showname) //true
    
    总结:公有的方法都放在原型下面 属性放在构造函数下面
    
  • 相关阅读:
    检查点学习笔记
    数据驱动-参数化(Parameters)
    loadrunner -vuser
    loadrunner 事务、同步点和思考时间
    loadrunner报错
    java随机数的产生
    Codeforces Round #666 (Div. 2) Power Sequence、Multiples of Length 思维
    Educational Codeforces Round 94 (Rated for Div. 2) String Similarity、RPG Protagonist、Binary String Reconstruction、Zigzags 思维
    Leetcode】周赛203 查找大小为M的最新分组
    HDU 6880 Permutation Counting dp
  • 原文地址:https://www.cnblogs.com/xiaohanga/p/11074509.html
Copyright © 2011-2022 走看看