对象2——《javascript高级程序设计》读书笔记

——>创建对象

1:工厂模式:将创建对象的过程用函数进行包装,之后对函数进行调用便可以创建实例对象

function createPerson(name,age,job) {
    var o = new Object();
    o.name = name;
    o.age = age;
    o.job = job;
    o.sayName = function() {
        alert(this.name);
    };
    return o;
}

var person1 = createPerson("waiting_h","20","student");
var person2 = createPerson("william","29","star");

2:构造函数模式:与上述工厂模式的不同之处在于——没有显式的创建对象;直接将属性和方法赋给了this对象;没有return语句;创建实例对象时需要使用new操作符。

function Person(name,age,job) {
    this.name = name;
    this.age = age;
    this.job = job;
    this.sayName = function() {
        alert(this.name);
    };
}

var person1 = new Person("waiting_h","20","student");
var person2 = new Person("william","29","star");

当然,为了避免构造函数内部的函数在每次实例化时都要创建(毕竟函数也是对象),可以将内部函数拿出来定义,在内部用赋值的方法进行引用,这样一来,多个实例对象中的该属性都指向同一个函数。而不是像之前每次都要创建时,每个实例对象中该属性都有一个函数副本。

此时,对于构造函数模式,我们应该来关注一下new操作符
——new操作符:使用new操作符会经历如下步骤:

      ——创建一个新对象;

      ——将构造函数的作用域赋给新对象(即this指向该新对象);

      ——执行构造函数中的代码(为新对象添加属性);

      ——返回新对象。

3:原型模式:

funtion Person() {}
Person.prototype.name = "waiting_h";
Person.prototype.age = 20;
Person.prototype.job = "student";
Person.prototype.sayName = function() {
    alert(this.name);
};

var person1 = new Person();

———原型对象:包含可以由特定类型的所有实例共享的属性和方法。

我们在创建一个函数时,与此同时会自动生成该函数的一个prototype属性,该属性指向原型对象,可通过构造函数的该属性来添加原型对象的属性,而原型对象在被创建的同时也自动生成一个constructor属性,该属性指向原prototype属性所在的函数。

另外,在我们调用构造函数创建实例对象时,该实例对象内部包含一个属性[[Prototype]](ECMAScript 5)用来指向构造函数的原型对象。

so:实例对象和构造函数之间没直接关系。

当然,原型属性有一个很大的弊端——由原型模式创建的实例属性拥有相同的属性方法,对于此弊端,我们可以利用实例属性来添加自己独特的属性,即使和原型对象中的属性重名,它也会屏蔽原型对象中的属性,因为查找某个实例属性时,是从实例本身开始,若没找到才会去原型对象中查找。

一般在使用时我们会比较青睐于构造函数模式和原型模式结合使用:构造函数模式用于定义实例属性,原型模式用于定义方法和共享的属性。

function Person(name,age,job) {
    this.name = name;
    this.age = age;
    this.job = job;
    this.friends = ["BigLun","William"];
}
Person.prototype = {
    constructor : Person;
    sayName : function() {
        alert(this.name);
    }
}

var person1 = new Person("waiting_h",20,"student");

时间: 2024-12-19 13:43:28

对象2——《javascript高级程序设计》读书笔记的相关文章

JavaScript高级程序设计-读书笔记(4)

第11章 DOM扩展 1.选择符API Selector API Level 1 的核心是两个方法:querySelector()和querySelectorAll().在兼容的浏览器中,可以通过Document及Element类型的实例调用它们.目前完全支持Selector API Level 1的浏览器有IE 8+. Firefox 3.5+. Safari 3.1+. Chrome和Opera 10+. querySelector()方法接收一个CSS选择符,返回与该模式匹配的第一个元素,

Javascript高级程序设计读书笔记(第六章)

第6章  面向对象的程序设计 6.2 创建对象 创建某个类的实例,必须使用new操作符调用构造函数会经历以下四个步骤: 创建一个新对象: 将构造函数的作用域赋给新对象: 执行构造函数中的代码: 返回新对象. 构造函数的问题:每个方法都要在每个实例上重新创建一遍: 理解原型对象: 无论何时,只要创建了一个新函数,就会根据一组特定的规则为该函数创建一个prototype属性,这个属性指向函数的原型对象.默认情况下,所有原型对象都会自动获得一个constructor属性,这个属性包含一个指向proto

JavaScript高级程序设计-读书笔记(6)

第20章 JSON JSON是一个轻量级的数据格式,可以简化表示复杂数据结构的工作量 JSON的语法可以表示一下三种类型的值 l        简单值:使用与JavaScript相同的语法,可以在JSON中表示字符串.数值.布尔值和null.但JSON不支持JavaScript中的特殊数值undefined. “Hello world!” l        对象(属性的值可以是简单值,也可以是复杂类型值,如下这样在对象嵌入对象) { “name” : ”Nicholas”, “age” : 29

JavaScript高级程序设计-读书笔记(2)

第6章 面向对象的程序设计 创建对象 1.最简单方式创建Object的实例,如 var person = new Object(); person.name = “Greg”; person.age = 27; person.job = ”Doctor”; person.sayName = function() { alert(this.name); }; person. sayName(): 缺点:会产生大量重复代码 2.工厂模式:用函数来封装以特定接口创建对象的细节,如 function c

JavaScript高级程序设计读书笔记之OOP

关于JavaScript创建对象的方式: 1.工厂模式 1 function createPerson(name, age, job){ 2 var o = new Object(); 3 o.name = name; 4 o.age = age; 5 o.job = job; 6 o.sayName = function(){ 7 alert(this.name); 8 }; 9 return o; 10 } 11 var person1 = createPerson("Nicholas&qu

JavaScript高级程序设计-读书笔记(3)

第8章 BOM 1.window对象 (1)全局作用域 BOM的核心对象是window,它表示浏览器的一个实例.在浏览器中,window对象既是通过JavaScript访问浏览器窗口的一个接口,又是ECMAScript规定的Global对象. 所有在全局作用域中声明的变量.函数都会变成window对象的属性和方法. (2)窗口关系及框架 如果界面中包含框架,这每个框架都拥有自己的window对象,并且保存在frames集合中,可以通过数值的索引(从0开始,从左至右,从上到下)或者框架名称来访问相

JavaScript 高级程序设计读书笔记(1)

第6章 面向对象的程序设计 属性的类型 JS 中对象的属性有两种,数据属性和访问器属性(accessor property ),属性有其自身的特性(arrribute),可以理解为关于属性的属性. 数据属性包含4个特性,分别是[[Configurable]], [[Enumerable]], [[Writable]], [[Value]]. 使用 Object.defineProperty 修改属性描述符时,若该属性之前不存在,除了代码里指定的特性值,其他特性值默认将是 false, 举例如下:

javascript高级程序设计读书笔记2

<!DOCTYPE HTML>//这个网页的文档类型,这个是html5的写法Bootstrap使用的某些HTML元素和CSS属性需要文档类型为HTML5 doctype.因此这一文档类型必须出现在项目的每个页面的开始部分 <html lang="en">//这里的lang="en"可以删除,如果不删除的,用谷歌之类打开,它会认为是英文的,会自动给翻译(如果设置了自动翻译的话) 有两个版本的 jQuery 可供下载:Production ver

javascript高级程序设计 读书笔记2

第五章 引用类型 对象是引用类型的实例,引用类型是一种数据结构,将数据和功能组织在一起.描述的是一类对象所具有的属性和方法.对象是某个特定引用类型的实例,新对象是使用new操作符后跟一个构造函数俩创建的,构造函数本身就是一个函数,只不过该函数试处于创建新对象的目的而定义的.  eg:    var person = new Object(); 1.创建Object实例的方式有两种   一:new+Object 二:对象字面量 var person = new Object(); var pers

javascript高级程序设计 读书笔记1

第二章  在HTML中使用JS 加载JS有三种:行内,head头部和外部链接JS   最好使用外部链接<script src="example.js" ></script>(推荐),在script标签中不需要放任何代码,放了也会被忽略.也可以使用<script src="example.js" /> 但是语法不符合HTML规范  所以不要这样写. 在传统做法中,script放在head中,但是会等到加载完JS再执行DOM,页面会延