JavaScript高级编程阅读笔记

来源:互联网 发布:优美句子知乎 编辑:程序博客网 时间:2024/04/30 22:43
js比较特殊,没有类的概念,js中的对象定义为:"无序的属性的集合,其属性可以包含基本值,对象或者函数".js的对象可以直接理解为散列表.对象的每个属性或者方法都有一个名字,而每个名字都映射到一个值.无非就是一组键值对,其中的值可以是数据或者是函数
每个对象都是基于一个引用类型来创建的,这个引用类型可以是js中的原生类型,也可以是开发人员自定义的类型.

可以这么定义一个对象
 var per = {        name:"勒布朗",        age : 29,        job : 'Software Engineer',        sayName : function(){            console.debug(this.name);        },        changeName : function(name){            this.name = name;        }            };    per.sayName();//输出 勒布朗


1.工厂模式创建对象
/**   工厂模式创建对象**///工厂模式demo1  使用创建对象 返回对象的方式function createPerson(nameStr) {var per = new Object();per.name = nameStr;per.sayName = function (){console.debug(this.name);};per.toString = function(){return this.name;}return per;} var p1 = createPerson('Tom');var p2 = createPerson('Jack');p1.sayName();p2.sayName(); var ps = [];ps.push(p1);ps.push(p2);alert(ps);console.debug(ps);//工厂模式生成对象 demo2 使用对象字面量的方式创建对象function createDog(nameStr){var dog = {name : nameStr,sayName : function (){console.debug(this.name);},toString : function(){return this.name;}};return dog;}var d1 = createDog('Tom');var d2 = createDog('Jack');d1.sayName();d2.sayName(); var ps = [];ps.push(d1);ps.push(d2);console.debug(ps);

2.使用构造函数模式创建对象
(1).创建一个对象
(2).将构造函数的作用域给新对象(因此this就指向了这个新对象)
(3).执行构造函数中的代码(为这个新对象添加属性)
(4).返回新对象
//构造器模式创建对象function Person(name, age, job) {//构造方法创建对象    //构造方法内部不需要显式的new对象this.name = name;this.age = age;this.job = job;this.sayName = function() {console.debug(this.name);console.debug(this.age);console.debug(this.job);}//构造方法内部不需要显式的返回对象}  //使用构造方法时,需要new操作创建对象    var per = new Person('Lebron',27,'SoftWareEngineer');  per.sayName();

每一个被创建的对象,都包含有构造函数这个属性,比如上面创建的per对象,包含有构造函数Person(),见下图




如果创建两个Person类型的对象,发现他们的构造器属性都是指向的函数Person()
          var per1 = new Person('Lebron',27,'SoftWareEngineer');  console.debug(per1);      var per2 = new Person('kobe',27,'SoftWareEngineer');  console.debug(per2);   console.debug(per1.constructor == Person);//true  console.debug(Person == per2.constructor);//true

对象的构造器属性最初是用来标识对象类型的,而检测对象类型最好还是使用instanceof操作符更靠谱一些,比如per1对象是Person的实例,也是Object的实例.
创建自定义的构造函数意味着将来可以将它的实例标识为一种特定的类型.

2.1将构造函数当作函数
    构造函数也是函数,只不过调用的方式不同而已.下面的代码展示了几种不同的调用方式
function Person(name, age, job){            this.name = name;            this.age = age;            this.job = job;            this.sayName = function(){                console.debug('hi~~ ' + this.name);            };        }        //使用构造函数的方式        var person = new Person("Nicholas", 29, "Software Engineer");        person.sayName();   //"Nicholas"        //使用普通函数的方式,这个函数被添加为window对象的一个属性        Person("Greg", 27, "Doctor");  //adds to window        window.sayName();   //"Greg"        window.name = 'lebron';        window.sayName();//lebron        //将函数绑定在一个对象上,并且设定了其作用域为这个绑定的对象        var obj = new Object();        Person.call(obj, "Kristen", 25, "Nurse");        obj.sayName();    //"Kristen"        obj.name = 'kobe';        obj.sayName();//kobe






0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 华为麦芒屏幕触屏失灵怎么办 华为麦芒5运行慢怎么办 手机屏保密码忘记了怎么办 麦芒5密码锁忘了怎么办 超薄手机壳松了怎么办 华为麦芒5声音小怎么办 笔记本外壳a面裂了怎么办 苹果手机外壳摔坏了怎么办 挂衣服肩膀出包怎么办 摩拜单车手机号注销了怎么办 摩拜单车手机号码换了怎么办 摩拜单车换手机号码打不开怎么办 摩拜单车丢了怎么办 摩拜单车忘锁了怎么办 透明手机壳粘指纹怎么办 tpu手机壳变黄了怎么办 0pp0手机声音小怎么办 橡胶皮套晒坏了怎么办 宝宝晚上吹空调发烧怎么办 玩手机手指尖疼怎么办 手机型号不支持微信运动怎么办 手腕向下压会疼怎么办 手腕韧带拉伤怎么办恢复快 华为手机用车载充电慢怎么办 华为麦芒6充电慢怎么办 oppo手机压弯了怎么办 麦芒5电池不耐用怎么办 华为7x照相模糊怎么办 华为麦芒6照相虚怎么办 荣耀8gps信号弱怎么办 华为麦芒4手机卡顿怎么办 华为麦芒4玩游戏卡怎么办 sim卡换卡通讯录丢了怎么办 换sim卡通讯录怎么办 麦芒4开不了机怎么办 麦芒5开不了机怎么办 麦芒6针丢了怎么办 麦芒6扬声器坏了怎么办 华为手机2s太卡怎么办 华为麦芒6网速慢怎么办 华为麦芒5太卡怎么办