有关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 通过调用构 ...
随机推荐
- Android环境安装简单总结
1.安装JDK 参考 http://jingyan.baidu.com/article/215817f7e3f2bd1eda1423f4.html 2.安装android SDK 参考 http:// ...
- 基于web自动化测试框架的设计与开发(讲解演示PPT)
- python - 接口自动化测试 - MysqlUtil - 数据库操作封装
# -*- coding:utf-8 -*- ''' @project: ApiAutoTest @author: Jimmy @file: mysql_util.py @ide: PyCharm C ...
- Django中从本地上传excel文件并将数据存储到数据库
Django中从本地上传excel文件并将数据存储到数据库 一.前端界面 <div class="page-container"> <form action=&q ...
- [oldboy-django][5python基础][内置方法]dir 如何查看一个对象有哪些方法
f = open('/etc/password', 'r') print(dir(f))
- redis linux 安装
安装 1): wget http://download.redis.io/releases/redis-5.0.2.tar.gz 2): tar xzf redis-5.0.2.tar.gz 3):c ...
- CodeForces Round #515 Div.3 B. Heaters
http://codeforces.com/contest/1066/problem/B Vova's house is an array consisting of nn elements (yea ...
- linux下telnet安装与使用
现在管理linux基本都用crt.xshell或者putty,已经没什么人用telnet,因为后续需要讲zabbix免客户端监控只telnet,通过telnet来监控服务器性能. yum安装telne ...
- 浅谈后缀自动机SAM
一下是蒟蒻的个人想法,并不很严谨,仅供参考,如有缺误,敬请提出 参考资料: 陈立杰原版课件 litble 某大神 某大神 其实课件讲得最详实了 有限状态自动机 我们要学后缀自动机,我们先来了解一下自动 ...
- 刷题总结——次小生成树(bzoj1977 最小生成树+倍增)
题目: Description 小 C 最近学了很多最小生成树的算法,Prim 算法.Kurskal 算法.消圈算法等等. 正当小 C 洋洋得意之时,小 P 又来泼小 C 冷水了.小 P 说,让小 C ...