面向对象--原型

Posted xiaohanga

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象--原型相关的知识,希望对你有一定的参考价值。

面向对象--原型

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

总结:公有的方法都放在原型下面 属性放在构造函数下面

以上是关于面向对象--原型的主要内容,如果未能解决你的问题,请参考以下文章

js之面向对象

JavaScript--面向对象原型继承

面向对象--原型

面向对象(2 )构造函数 原型 原型链的理解

js面向对象编程/原型链/继承 —— javascript

十面向对象与原型