有关javaScript面向对象和原型笔记
javaScript是一种比較特殊的语言,ECMAScript中没有类的概念。跟其它面向对象的语言有一定的差别。它的对象也与基于类的语言中的对象有所不同,严格来说,javascript对象是一组没有特定顺序的值,对象的每一个属性或方法都有一个名字。而每一个名字都映射到一个值。每一个对象都是基于一个引用类型的创建的。
创建自己定义对象的最简单的方式就是创建一个Object的实例。然后再为其加入属性和方法,如:
var box = new Object(); //创建对象
box.name1 = 'Lee'; //加入属性
box.age = 100; //
box.run = function () {
return this.name1 + this.age //this表示当前作用域下对象
不足:使用同一个接口创建非常多对象。会产生非常多反复代码。
工厂模式:
在ECMAScript中无法创建类,开发者就想出了第二种方法,用一种函数来封装以特定接口创建对象的细节,如:
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('lilei',29,'Software Engineer');
var person2 = createPerson('Greg',27,'Doctor');
person1.sayName();
person2.sayName();
alert(typeof person1);
alert(typeof person2);
函数creatPerson()可以依据接受的參数来构建一个包括全部必要信息的Person对象。可以无数次低调用这个函数。而每次它都返回一个包括三个属性的一个方法的对象。
工厂模式尽管攻克了创建多个类型对象的问题,但却没有解决对象识别的问题。
构造函数模式
function Person(name,age,job){
this.name = name;
this.age = age;
this.job = job;
this.sayName = function(){
alert(this.name);
};
}
var person1 = new Person('lilei',29,'Software Engineer');
var person2 =new Person('Greg',27,'Doctor');
person1.sayName();
person2.sayName();
alert( person1 instanceof Object);
alert( person2 instanceof Person);
在这个样例其中。Person()函数代替了createPerson()函数。同一时候注意到跟createPerson()函数的差别:
没有显式地创建对象;
直接将属性和方法赋给了this对象;
没有return 语句;
构成方法首个字母大写。
构造函数的的问题也有,就是每一个方法都要在每一个实例上又一次创建一遍,
组合使用构造函数模式和原型模式
创建自己定义类型常见的方式是组合使用构造函数模式和原型模式。
构造函数模式用于定义实例属性,而原型模式用定义方法和共享属性,从而每一个实例都会有 自己的一份实例属性的副本。但同一时候又共享着对方的方法的引用。
function Person(name,age,job){
this.name =name;
this.age = age;
this.friends = ["Shelpy","Court"];
}
Person.prototype = {
constructor:Person,
sayName:function(){
alert(this.name)
}
}
var person1 = new Person('lilei',29,'Software Engineer');
var person2 = new Person('Greg',27,'Doctor');
person1.friends.push("Van");
alert(person1.friends);
alert(person2.friends);
alert(person1.friends === person2.friends);
alert(person1.sayName === person2.sayName);
在这个样例中。实例属性都是在构造函数中定义的。而由全部实例共享的属性consructor和方法sayName()则是在原型中定义的。当改动了person1.friends时,并不会影响到person2,.friends。由于它们引用了不同的数组。
有关javaScript面向对象和原型笔记的更多相关文章
- 第一百零九节,JavaScript面向对象与原型
JavaScript面向对象与原型 学习要点: 1.学习条件 2.创建对象 3.原型 4.继承 ECMAScript有两种开发模式:1.函数式(过程化),2.面向对象(OOP).面向对象的语言有一个标 ...
- JavaScript面向对象编程学习笔记
1 Javascript 面向对象编程 所谓"构造函数",其实就是一个普通函数,但是内部使用了this变量.对构造函数使用new运算符,就能生成实例,并且this变量会绑定在实例 ...
- 了解JavaScript 面向对象基础 & 原型与对象
面向对象语言中的对象 老是能听到什么基于对象, 面向对象. 什么是对象, 如果有面向对象基础的人可以无视了, 下面举个简单的例子给大家讲讲面向对象中, 对象的定义, 这个是比较通用的, 不过对于JS来 ...
- JavaScript面向对象和原型函数
对象,是javascript中非常重要的一个梗,是否能透彻的理解它直接关系到你对整个javascript体系的基础理解,说白了,javascript就是一群对象在搅..(哔!). 常用的几种对象创建模 ...
- JavaScript面向对象与原型
工厂模式:无法识别对象 function createObject(name, age) { //集中实例化的函数 var obj = new Object(); obj.name = name; o ...
- JavaScript 面向对象与原型
ECMAScript有两种开发模式:1.函数式(过程化);2.面向对象(OOP); 一 创建对象1.普通的创建对象 ? 1 2 3 4 5 6 7 8 9 // 创建一个对象,然后给这个对象新的属性和 ...
- javascript面向对象和原型
/* //工厂模式 function createObject(name,age){ var obj = new Object();//新建一个对象 obj.name=name;//新建对象的属性 o ...
- 快速理解JavaScript面向对象编程—原型
总的来说js语言就是门面向对象编程的语言,对象这个概念几乎贯穿了整个js的学习. 对象 创建对象两种方法:(若要生成对象实例必须调用构造函数) 1.var obj = {name:"jer& ...
- JavaScript 面向对象之原型对象
原型的概述 我们创建的每个函数都有一个 prototype(原型)属性,这个属性是一个对象,它的用途是包含可以由特定类型的所有实例共享的属性和方法. 逻辑上可以这么理解:prototype 通过调用构 ...
随机推荐
- XSS Challenges(1-12关)
XSS Challenges解析: 1. 什么过滤也没有,而且是直接输出.<scrip>alert(document.domain);</script>即可通过 2. 直接输入 ...
- c#之线程同步--轻量级同步 Interlocked
轻量级同步 Interlock 为什么说它是轻量级呢?因为它仅对整形数据(即int类型,long也行)进行同步. 如果你学过操作系统里面的PV操作(即信号量),那么你对它已经了解了一般.它实现的正是如 ...
- 理解机器为什么可以学习(四)---VC Dimension
前面一节我们通过引入增长函数的上限的上限,一个多项式,来把Ein 和 Eout 的差Bound住,这一节引入VC Bound进一步说明这个问题. 前边我们得到,如果一个hypethesis集是有bre ...
- Halcon17 windows 下载
Halcon17 windows 下载地址:http://www.211xun.com/download_page_9.html HALCON 17 是一套机器视觉图像处理库,由一千多个算子以及底层的 ...
- allocator class
当分配一大块内存时,我们通常计划在这块内存上按需构造对象,这样的我们希望将内存分配和对象构造分离.但是通常的new关键字的分配的动态空间,有时候会造成一些浪费,更致命的是“如果一个类没有默认构造函数, ...
- 【转】 [UnityUI]UGUI射线检测
http://blog.csdn.net/lyh916/article/details/50947026 1.Graphic Raycaster 主要用于UI上的射线检测,挂有这个组件的物体,必须要挂 ...
- Generator与async/await与Generator的模拟
Generator 函数有多种理解角度.语法上,首先可以把它理解成,Generator 函数是一个状态机,封装了多个内部状态. 执行 Generator 函数会返回一个遍历器对象,也就是说,Gener ...
- HDU 3333 Turing Tree(离线树状数组)
Turing Tree Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- JS 监听绑定和取消事件
1. 原生 JS 语言: 绑定:addEventListener(type, function, false) 取消: removeEventListener(type, function, fals ...
- 【10】【转】node 之 pipe机制----未理解
转载地址:http://blog.csdn.net/vieri_32/article/details/48376547 前言 前几天别人请教我关于pipe的问题,我发现我虽然用了nodejs很久,但是 ...