美文网首页
JS的面向对象的编程思想1-阮一峰

JS的面向对象的编程思想1-阮一峰

作者: 人才辈出阿卡姆 | 来源:发表于2017-07-08 11:45 被阅读0次

在传统的思维模式上定义个一对象

//方式一:
var obj={};
obj.name="小明";
obj.age=20;
console.log(obj)
//方式二:
var obj1={
    name:"隔壁小王",
    age:16
}
console.log(obj1);

从上面来看:这两个obj的输出结构上是一样的一个name,一个age 但当需要构建N多个这种数据结构的时候,就不方便我们进行操作,程序员的主要思想表现是什么,就是懒——能让计算机自己完成的事情,就不要重复的去操作。

//这个时候我们创建一个函数,让他来实现相似的功能
function Obj(name,age){
    var obj= {};
    obj.name=name;
    obj.age=age;
    return obj;    //这里必须要将obj这个结果返回,如果没有返回的话,你在外部看不到这个信息
}

function Cat(name,color) {
    return {
        name:name,
        color:color
    }
}

//上面这两个例子在实质上都是一样的,都是在函数内部通过创建一个对象,在对象的属性上进行设置,最后将这个对象进行返回

var obj2=Obj('xiaohong',20);
var obj3=Obj('damao',30);
console.log(obj2)
console.log(obj3)
console.log(obj3.constructor)
var mao=Cat('mao','red');
var gou=Cat('gou','black');
console.log(mao.constructor);

但是有一个问题,阮一峰上面说这两个实例内在没什么联系,不能反映出他们是同一个原型上的实例,不明白他这句话的意思???
下面使用构造函数方式进行创建,构造函数的本质就是一个函数,只不过它使用了new来创建实例。并且构造函数的内部使用this来表示它的上下问环境和调用者
//作为函数调用的话,它的上下文环境就是global;作为对象的属性方法来调用的话,就是指他的父级=这个对象;作为构造函数来使用,this指的就是这个构造函数创建的实例;apply,call来使用的话,this指的就是它的第一个参数,就是让谁来借用这个方法,直白一点 银行.money.call(我) 我借银行的钱

//    new关键字的作用
//    创建一个空对象。
//    设置这个对象的原型,就是指定__proto__的指向
//    将构造函数的作用域赋给新对象(因此this就指向了新对象)
//    执行构造函数中的代码(给这个新对象添加方法和属性)
//    返回这个对象(this)

//我在这里就认为 构造函数是new和this配合使用的函数
function Car(name,price){
    this.name=name;
    this.price=price;
}
var BMW=new Car('宝马E90',150000);
var Audi=new Car('audiA8',350000);
console.log(BMW);
console.log(Audi);
console.log(BMW.constructor)

好了,到了这里,我发现刚才留下疑问的答案了:没有通过构造函数进行创建的实例=》function Object() { [native code] },而通过构造函数创建的实例,他们都指向=》function Car(name,price){ }

这个时候阮一峰引入了另一个问题:我们虽然通过构造函数进行统一的属性和内容,但是我在创建实例的时候如果有的属性和方法并不是我想要的,就会内存的消耗。能不能有一种方法是,我只要你这个外壳,里面的内容我自己来添加。我用的时候添加,不用的话你就保持原有的状态。不消耗内存空间。
这里指的意思是在每次创建实例的时候,其实都开辟了一个新的内存空间,但是里面东西是重复的。现在我们要把相同内容抽离出来,节省出来这一部分空间 引入了prototype的概念

//Car.prototype.color='red';//假设这些车都是红色的

相关文章

  • JS的面向对象的编程思想1-阮一峰

    在传统的思维模式上定义个一对象 从上面来看:这两个obj的输出结构上是一样的一个name,一个age 但当需要构建...

  • Javascript面向对象编程

    阮一峰文档备忘 Javascript 面向对象编程(一):介绍封装 Javascript 面向对象编程(二):介绍...

  • javascript 面向对象编程

    引自:阮一峰的博客Javascript面向对象编程(一):封装Javascript面向对象编程(二):构造函数的继...

  • js高级 第一章

    JS面向对象编程 一、什么是面向对象思想(编程思想角度)? 现有的两种程序思想:面向过程和面向对象 1.面向过程...

  • JavaScript面向对象编程-封装

    参考阮一峰博客 js是基于对象的语言,但又不是一种真正面向对象编程的语言(OOP Object-Oriented-...

  • js面向对象

    js面向对象(第五周) 什么是面向对象 面向对象是一种编程思想,是在面向过程编程(结构化编程)之后出现的,面向对象...

  • JS面向对象

    JS面向对象入门 1、面向对象语言概念面向对象语言主要包括 类、对象、封装、多肽。2、面向对象的编程思想面向过程思...

  • js 面向对象 --构造函数执行机制

    /* * JS是一门编程语言(具备编程思想) * 【面向对象】 * JS/JAVA/PHP/C#/PYTHON...

  • 面向对象

    //JS是编程语言-->编程语言都是基于"面向对象的思想"进行开发设计的-->面向对象里面需要我们掌握的:类的继承...

  • 类与对象(1) - Class、Object

    面向对象编程思想 Java开发是利用 面向对象 的思想实现 面向过程 的开发。 面向对象编程(OOP:Object...

网友评论

      本文标题:JS的面向对象的编程思想1-阮一峰

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