文斌的博客

学无止境
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

我的JavaScript笔记--面向对象

Posted on 2018-10-30 17:14  文斌1988  阅读(207)  评论(0编辑  收藏  举报
   
单例模式 ??(基于对象,不能批量生产)
 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 就是去原型上找而不去属性上找

 

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