单例模式 ??(基于对象,不能批量生产)
 var person = {
            name: "ywb",
            sayHi: function () {
                alert();
            } ,
            0:'0',
            1 :'1'
  } 
 person.sayHi();
     for (var k in person) {
            //k是属性名
            //得到属性值 person[k]
            alert(k);
            alert(person[k]);
        }
特点
1,我们定义的这些属性和值都是对我们当前这个对象的描述
    定义属性名的时候可以用数字,把可以用数字这种形式成为类数组
2 , 对象的属性之间有可能也是有关联的
3,通过for in遍历对象的时候,如果有数字的属性名,就先遍历数字
for in循环中获取对象的属性值,只能用obj[属性名]的方式。
--------------------------------------------------------------------
工厂模式
定义一个方法,方法内部创建一个Object数据类型,然后返回这个对象。
       function factory(name, age) {
            var obj = new Object();
            obj.name = name;
            obj.age = age;
            obj.sayHi = function () {
                alert("hello," + name);
            }
            return obj;
        }
        var ywb = factory("ywb", 18);
        ywb.sayHi();
工厂模式所有的对象类型都是一个object
构造函数模式
个人理解:更像class一样,创建对象去new一个class
通过new这种方式,出来的结果是一个实例。
       function person(name, age) {
            this.name = name;
            this.age = age;
            this.sayHi = function () {
                alert("hello," + name);
            }
        }
        var ywb = new person("ywb", 18);
        ywb.sayHi();
           alert(ywb instanceof Person ); //可以确定ywb是Person的实例
这时候,这个实例(对象)是谁,this就指向谁。this就是这个实例的上下文in
因为每一次实例化一个function,都会在内存中存这个function的字符串
原型模式
创建一个对象,我们不仅在内存中开辟了空间,将自己私有的键值对存进来,还有个系统自带的属性_proto_。
在声明function时,它也有一个自己的属性,就是prototype。
prototype也有_proto_属性
      function factory(age) {
            this.name = "hart";
            this.age = age;
        }
        factory.prototype.sayHi = function () {
            alert("hello," + name);
        }
        factory.prototype.name = "ywb";
        var p1 = new factory(11);
       
        p1.__proto__ = null;
        alert(p1.name);
如果我们的某个实例想获取类中的prototype上定义的方法和属性,我们的原理是实例中默认的_proto_属性去获取。
调用一个方法或属性,首先去其私有属性上找,没有找到才去原型链上找。
Object是所有实例的基类。
p1.__proto__.name 就是去原型上找而不去属性上找

如果你觉得我的文章对您有帮助,给点鼓励,谢谢

我的JavaScript笔记--面向对象的更多相关文章

  1. javascript笔记 面向对象

    Javascript是一种面向对象的弱语言,既然有面向对象,就有继承 继承: 1.call函数和apply函数:区别在于它们参数上的不同,固定参数的用call,可变参数的用apply.换句话说,就是a ...

  2. javascript笔记—面向对象

    什么是对象: 对象是一个整体,对外提供一些操作. 什么是面向对象: 使用对象时,只关注对象提供的功能,不关注其内部细节,例如jquery 面向对象是一种通用思想,并非只有编程中能用,任何事情都可以用. ...

  3. JavaScript笔记——面向对象与原型

    JavaScript也是一门面向对象的语言.面向对象的语言有一个标志,那就是类的概念,而通过类可以创建任意多个具有相同属性和方法的对象.但是,JavaScript竟然没有class,因此它的面向对象也 ...

  4. JavaScript高程第三版笔记-面向对象编程

    之前有篇博客曾提到过一点js的面向对象编程:js面向对象编程. 这里就结合js高程详细剖析一下javascript的面向对象编程. 前序: 1⃣️Object.defineProperty() var ...

  5. [Effective JavaScript 笔记]第3章:使用函数--个人总结

    前言 这一章把平时会用到,但不会深究的知识点,分开细化地讲解了.里面很多内容在高3等基础内容里,也有很多讲到.但由于本身书籍的篇幅较大,很容易忽视对应的小知识点.这章里的许多小提示都很有帮助,特别是在 ...

  6. 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用

    垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...

  7. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

  8. 0025 Java学习笔记-面向对象-final修饰符、不可变类

    final关键字可以用于何处 修饰类:该类不可被继承 修饰变量:该变量一经初始化就不能被重新赋值,即使该值跟初始化的值相同或者指向同一个对象,也不可以 类变量: 实例变量: 形参: 注意可以修饰形参 ...

  9. [Java入门笔记] 面向对象编程基础(二):方法详解

    什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能上来看,方法都有点类似与函数.但是,方法与传统的函数还是有着不同之处: 在 ...

随机推荐

  1. Python-理解装饰器

    文章先由stackoverflow上面的一个问题引起吧,如果使用如下的代码: @makebold @makeitalic def say(): return "Hello" 打印出 ...

  2. struts过滤器的不同2.16以后应该是: org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter 2.12以前应该是org.apache.struts2.dispatcher.Filterdispatcher

    版本不同过滤器不同.2.16以后应该是:org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter2.12以前应该是or ...

  3. Android Unique Device ID

    There are several occasions when the unique identifier of a device is required. For instance you nee ...

  4. Js日常笔记之this

    在javascript中自己创建构造函数时可以利用this来指向新创建的对象上.这样就可以避免函数中的this指向全局了,如下 var x = 2; function test(){ this.x = ...

  5. VUE详解

    渐进式框架 声明式渲染(无需关心如何实现).组件化开发.客户端路由(vue-router).大规模的数据状态(vuex).构建工具(vue-cli) 全家桶:vue.js+vue-router+vue ...

  6. mysql主从复制之mysql-proxy实现读写分离

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://lansgg.blog.51cto.com/5675165/1242674 本文系 ...

  7. POJ-1318(list.sort()输出不为字典序,map才是按字典序排列)

    #include<iostream> #include<string> #include<list> #include<map> #include< ...

  8. [na]台式机装原版Win2008R2

    坑了老半天,总结出几点 1,系统os下载: http://msdn.itellyou.cn/ 注:其他地方下载的,装后发现不是起不来就是驱动装不了. 2,u盘里放个压缩软件: 好呀压缩   和  浏览 ...

  9. python2和python3中str,bytes区别

    python2中,有basestring.str.bytes.unicode四种类型 其中str == bytes ,basestring = (str,unicode) >>> i ...

  10. Nginx日志过滤 使用ngx_log_if不记录特定日志

    ngx_log_if是Nginx的一个第三方模块.它在Github上的描述是这样介绍的:ngx_log_if是一个独立的模块,允许您控制不要写的访问日志,类似于Apache的"CustomL ...