美文网首页
JS自定义对象的理解

JS自定义对象的理解

作者: Gino_Li | 来源:发表于2019-03-01 13:48 被阅读0次

JavaScript是一门面向对象语言
面向对象:是一种编程思想

什么是对象?

  • 对象是属性和方法的集合体;
    属性:储存数据
    方法:执行的动作

                      语法:obj = {
                          name:12,
                          age:13,
                          skill:function(){}
                      }
                      //name,age:表示对象obj的属性名,冒号后面的为属性值,像这种形式叫键值对
                      //skill:是obj对象的方法
    

自定义对象方式

1.字面量
2.工厂模式
3.构造函数模式
4.原型模式
5.混合模式(原型模式和构造函数模式的混合)

字面量

  • 优点:简单,容易理解
  • 缺点:不能批量生产
            var obj={
                name:'什么颜色',
                age:78,
                skill:function(){
                    console.log('睡觉');
                }
            }
            console.log(obj['name']);//什么颜色
            obj.skill();//睡觉

工厂函数模式

  • 优点:实现了对象的批量生产
  • 缺点:不能检测出对象是由谁来生产的
function factory(name,age,callback){
    return {
        name:name,
        age:age,
        callback:callback,//回调函数
        skill:function(){   //方法
            console.log('睡觉');
        }
    }
}
var girlFriend = factory('翠花',18);
console.log(girlFriend);//{name: "翠花", age: 18, skill: ƒ, callback: undefined}

var girlFriend2 = factory('如花',81);
console.log(girlFriend2);   //{name: "如花", age: 81, skill: ƒ, callback: undefined}

console.log(girlFriend==girlFriend2);//false

var girlFriend = factory('凤姐',20,function(){
    console.log("解锁更多姿势!");
});
//调用方法
girlFriend3.callback();

构造函数模式

所有属性和方法需要this来定义,通过new关键词来调用

new关键词做了什么事?
1.创建一个新对象
2.将this指向新对象
3.执行构造函数的代码
4.返回这个新对象

  • 优点:解决不能识别由谁创建的问题
  • 缺点:实现相同的方法,却会各自创建新的空间来存放这些方法,这样会造成空间浪费
            function Human(type,name,gender,age){
                this.type = type;
                this.name = name;
                this.gender = gender;
                this.age = age;
                this.skill = function(){
                    console.log('走');
                }
            }
            var shiyan = new Human('黄种人','食盐','男',20);
            console.log(shiyan);//Human {type: "黄种人", name: "食盐", gender: "男", age: 20, skill: ƒ}
            var xiawa = new Human('白种人','夏娃','女',1000);
            console.log(xiawa);//Human {type: "白种人", name: "夏娃", gender: "女", age: 1000, skill: ƒ}

            console.log(xiawa.__proto__.constructor);//指向构造函数
            console.log(xiawa.skill==shiyan.skill);//false

原型模式

  • 优点:实现继承,解决了构造函数空间浪费的问题
  • 缺点:不能定制
function Animal(){};
Animal.prototype.type='cat';
Animal.prototype.skill=function(){
    console.log('eat')
}
var mao = new Animal();
mao.skill();//eat
var mao2 = new Animal();
mao2.skill();//eat
console.log(mao.skill==mao2.skill);//true
console.log(mao2==mao);//false

混合模式(原型模式和构造函数模式的结合)

结合了他们两个的优点

function Student(cls,name,age,gender,num){
    this.cls=cls;  
    this.name=name;
    this.age=age;
    this.gender= gender;
    this.num = num;
}
//共有的方法,不需要每次创建,节省空间
Student.prototype.skill=function(){
      console.log('学习');
}
var student1 = new Student('01','小芳',12,'女','0101');
console.log(student1);

var student2 = new Student('01','小芳',12,'女','0101');
console.log(student1.skill==student2.skill);//true
console.log(student1==student2);//false
            
//student.gender返回的是简单数据类型
console.log(student1.gender==student2.gender);//true

相关文章

  • JS自定义对象的理解

    JavaScript是一门面向对象语言面向对象:是一种编程思想 什么是对象? 对象是属性和方法的集合体;属性:储存...

  • 自定义对象

    1、自定义对象 1.1、什么是自定义对象 在Javascript中,除了js本身提供的自定义对象外(如Array、...

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

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

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

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

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

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

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

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

  • JS数学对象Math、日期Date

    JS对象分为三种,分别是自定义对象、内置对象及浏览器对象。 内置对象就是JS语言自带的一些对象。 一、数学对象Ma...

  • javascript 内置对象

    javascript 中的对象分为3种: 自定义对象、内置对象、浏览器对象; 内置对象: 就是JS自带的对象, ...

  • JavaScript中的本地对象、内置对象和宿主对象

    JavaScript中的本地对象、内置对象和宿主对象JS中,可以将对象分为“内部对象”、“宿主对象”和“自定义对象...

  • JS 对象理解

    简单梳理一下对象的意义: 什么是对象?多个数据的封装体用来保存多个数据的容器一个对象代表现实中的一个事物 为什么要...

网友评论

      本文标题:JS自定义对象的理解

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