js面向对象

作者: 马大哈tt | 来源:发表于2017-12-21 22:28 被阅读0次

正所谓万物皆对象,面向对象也是很多编程语言里常谈的问题,接下来我们来了解一下js的面向对象。

一、定义对象的三种方式

// 第一种:
var obj1 = {
        name:"李四",
        age:19,     
        };
// 第二种;
var obj2 = new Object();
obj2.name = "张三";
obj2.age = "20";
// 第三种;
var obj3 = Object.create({name:"张三",age:20});

二、对象的传址

  1. 对象的传址:对象赋值相同的内存地址;
    举个例子:改变arr2[1]的值,arr[1]也会随之改变,这样就得不到我们预期的效果了。
var arr = [1,2,3,4,5];
        var arr2 = arr;
    arr2[1] = 6;
        console.log(arr);
  1. 深拷贝:解决传址问题
    把对象使用JSON.stringify方法转变成json格式数据 ,然后在使用JSON.parse解析json字符串,这个看起来在做一些浪费时间的事情,但数据经过这样转变后,改变arr2的值,不会影响到arr的值。
var arr2 = JSON.parse(JSON.stringify(arr));

三、工厂模式

工厂模式:使用函数封装一个创建对象的接口,实例化对象。用于解决变量的污染。下面例子是工厂模式的一般写法;

function Factory(height){
            // obj人类;
        var obj = {};
            obj.name = "小明";
            obj.height = height;
            obj.age = 20;
            obj.hobby = function(){
                console.log("我喜欢篮球");
            }
            return obj;
        }
        var newFactory = Factory("180cm");
        console.log(newFactory.height);
        newFactory.hobby();

四、构造函数

  1. 构造函数类似于类的概念,在es6还没之前,都是使用构造函数,它与类相似,首字母大写(约定俗成的).

构造函数的原型:
对象是由自身和原型共同构成的;对象的原型是proto
构造函数是由自身和原型共同构成的;构造函数的原型prototype
属性写在构造函数里;方法写在原型上;

// 定义构造函数 (this)
        function Car(style1,color){
            // obj.type = type;
            this.type = style1;
            this.color = color;
            this.action = function(){
                console.log("跑");
            }
        }
  1. 调用构造函数
// 实例化 关键字:new(把抽象类具体化,把类变成对象);
        var car1 = new Car("宝马","红色");
        console.log(car1.type);
        car1.action();
  1. new 关键字 的作用
  • 创建了空的对象;
        var obj = {};
  • 改变this指向;
        Car.call(obj,"宝马","白色");
        console.log(obj.type);
  • 赋值原型;
    若使用(obj._proto_ = Car.prototype;)肯定是不合理的,会存在上面所说的传址问题,这时候我们需要引入一个中间构造函数。
 // 解决传址问题 借助中间构造函数
         function Link(){}
         Link.prototype = Person.prototype;
         // 子级原型赋值一个空的(只有原型的)实例化对象,子级改变不影响父级
        Car.prototype = new Link();

4.构造函数的公有和私有以及继承

  • 公有属性和私有属性
    在js中没有public,private,protent三个关键字来定义成员的访问权限,只能模拟公有属性和私有属性。使用 var\let定义的是私有属性;使用this关键字的是公有属性
function Person(name){
            // 私有属性;
            var name = name;
            // 公有属性;
            this.height = "178cm";
            // get方法:通过公有方法访问私有属性
            this.get = function(){
                return name;
            }
            // set方法:设置私有属性的
            this.set = function(newName){
                name = newName;
                console.log(name);
            }
        }
  • 继承
    由于没有extends,使用call、apply、bind函数改变this指向从而达到想要的继承效果。
        function Dad(height){
            this.name = "张三";
            this.age = 50;
            this.height = height;
            this.money = "$1000000000";
            this.hobby = function(){
                console.log("喜欢太极");
            }
         }
         function Son(height){
            Dad.call(this,height);
            this.action = function(){
                console.log("玩");
            }
         }

相关文章

  • JS面向对象精要(二)_函数

    JS面向对象精要(一)_原始类型和引用类型JS面向对象精要(二)_函数JS面向对象精要(三)_理解对象JS面向对象...

  • JS面向对象精要(三)_理解对象

    JS面向对象精要(一)_原始类型和引用类型JS面向对象精要(二)_函数JS面向对象精要(三)_理解对象JS面向对象...

  • JS面向对象精要(四)_构造函数和原型对象

    JS面向对象精要(一)_原始类型和引用类型JS面向对象精要(二)_函数JS面向对象精要(三)_理解对象JS面向对象...

  • JS面向对象精要(五)_继承

    JS面向对象精要(一)_原始类型和引用类型JS面向对象精要(二)_函数JS面向对象精要(三)_理解对象JS面向对象...

  • js 面向对象和面向过程

    js 面向对象和面向过程

  • 面向对象OOP--JS

    作者:烨竹 JS面向对象简介 JS名言:万物皆对象 JS面向对象比PHP简单很多;因为JS中没有class关键字,...

  • JavaScript笔记(一)

    一、面向对象面向过程的区别 1、什么是js对象 js对象:属性和方法的集合,js所有数据都可以看成对象...

  • JS面向对象

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

  • 2018-01-18

    js中的面向对象核心 js是基于对象的编程语言,在后面的学习中我们通过一种模式使其转化成为面向对象的语言。js面向...

  • 浅谈JS中的面向对象

    浅谈JS中的面向对象 本文主要说说本人在JS中对面向对象的理解。 计算机编程语言主要分为面向过程式编程和面向对象式...

网友评论

    本文标题:js面向对象

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