JS面向对象——构造函数模型
ECMAScript中的构造函数可用来创建特定类型的对象。我们可以创建自定义构造函数,从而定义对象类型的属性和方法,解决工厂模型中对象识别的问题。
<!DOCTYPE html>
<html>
<head>
<title>构造函数模型</title>
<script type="text/javascript">
function Student(name,age,sex){//构造函数首字母大写,普通函数首字母小写
//直接将属性和方法赋值给this对象
this.name=name;
this.age=age;
this.sex=sex;
this.sayName=function(){
alert(this.name);
};
} /****************************** 构造函数模型 ******************************/
/*创建Student的新实例实际经历的步骤:
(1)创建一个新对象
(2)将构造函数的作用域赋值给新对象(因此this指向了新对象)
(3)执行构造函数中的代码(为新对象添加属性和方法)
(4)返回新对象
*/
var stu1=new Student("Lucy",10,"girl");//使用操作符new
var stu2=new Student("Bob",9,"boy"); //以上的stu1和stu2这两个对象的constructor(构造函数)属性均指向Student
alert(stu1.constructor==Student);//true
alert(stu2.constructor==Student);//true //对象的constructor属性最初是用来表示对象类型的。检测对象类型使用instanceof更可靠
alert(stu1 instanceof Student);//true
alert(stu2 instanceof Student);//true
alert(stu1 instanceof Object);//true
alert(stu2 instanceof Object);//true
/*************************************************************************/ /**************************** 1.构造函数当作函数 **************************/
//当作构造函数
var stu3=new Student("Nike",10,"boy");
stu3.sayName();//"Nike"
//当作普通函数
Student("Greg",13,"boy");//添加到window对象
window.sayName();//"Greg"
//在另一个作用域中调用
var o=new Object();
Student.call(o,"Kristen",8,"girl");
o.sayName();//"Kristen"
/************************************************************************/ /**************************** 2.构造函数模型问题 *************************/
//问题:每个方法都要在每个实例上重新创建一遍,不同实例上的同名函数是不相等的。为解决这一问题于是就有了原型模型
alert(stu1.sayName==stu2.sayName);//false
/************************************************************************/ </script>
</head>
<body>
</body>
</html>
部分摘自《JavaScript高级程序设计(第3版)》
JS面向对象——构造函数模型的更多相关文章
- JS面向对象——组合使用构造函数模型与原型模型
该模型为创建自定义类型最常用的方式. <!DOCTYPE html> <html> <head> <title>组合使用构造函数模型和原型模型</ ...
- JS面向对象——组合使用构造函数模型与原型模型中的隐患
组合使用构造函数模型和原型模型中的问题,使用对象字面量重写原型模型会有隐患(涉及到原型的动态性),如下例: <!DOCTYPE html> <html> <head> ...
- JS面向对象——动态原型模型、寄生构造模型
动态原型模型 组合使用构造函数模型和原型模型,使得OO语言程序员在看到独立的构造函数和原型时很困惑.动态原型模型致力于解决该问题,它把所有的信息封装在构造函数中,通过在构造函数中初始化原型(仅在必要情 ...
- js面向对象的实现(example 二)
//这个方法和上篇文章(js面向对象的实现(example 一))中的方法类似,但是更为简洁 //通过函数赋值的方式来构造对象 //同样通过闭包的方式来封装对象及内部变量 (function () { ...
- 浅谈JS面向对象之创建对象
hello,everybody,今天要探讨的问题是JS面向对象,其实面向对象呢呢,一般是在大型项目上会采用,不过了解它对我们理解JS语言有很大的意义. 首先什么是面向对象编程(oop),就是用对象的思 ...
- js面向对象继承
前言 最近看到js面向对象这章节了,主要学习了原型和面向对象继承关系,为了梳理自己的知识逻辑,特此记录. js的面向对象 先说说我目前了解的js创建对象方法 1.写一个函数,然后通过new创建对象 2 ...
- 拖拽系列二、利用JS面向对象OOP思想实现拖拽封装
接着上一篇拖拽系列一.JavaScript实现简单的拖拽效果这一篇博客将接着对上一节实现代码利用JS面向对象(OOP)思维对上一节代码进行封装; 使其模块化.避免全局函数污染.方便后期维护和调用:写到 ...
- JS面向对象笔记二
菜单导航,<JS面向对象笔记一>, 参考书籍:阮一峰之<JavaScript标准参考教程> 一.构造函数和new命令 二.this关键字 三.构造函数和new命令 四.构造函 ...
- 【JavaScript】 JS面向对象的模式与实践 (重点整治原型这个熊孩子 (/= _ =)/~┴┴ )
参考书籍 <JavaScript高级语言程序设计>—— Nicholas C.Zakas <你不知道的JavaScript> —— KYLE SIMPSON 在JS的面向 ...
随机推荐
- rpmbuild - 构建 RPM 打包
SYNOPSIS 构建打包: rpmbuild {-ba|-bb|-bp|-bc|-bi|-bl|-bs} [rpmbuild-options] SPECFILE ... rpmbuild {-ta| ...
- smbumount - 为普通用户卸载smb文件系统
总览 smbumount 装载点 描述 普通用户使用这个程序可以卸载smb文件系统.它在工作时会suid到root身份,并且向普通linux用户提供了对资源更多的控制能力.在suid方面,它拥有足够的 ...
- React(2) --super关键字
参考:http://www.phonegap100.com/thread-4911-1-1.html Es6中的super可以用在类的继承中,super关键字,它指代父类的实例(即父类的this对象) ...
- Sass:Opacity函数-alpha()、opacity()函数
alphpa() 和 opacity() 函数很简单,与前面介绍的 red(),green() 等函数很类似.这个函数的主要功能是用来获取一个颜色的透明度值.如果颜色没有特别指定透明度,那么这两个函数 ...
- ansible笔记(一)--架构图以及工作原理
一.ansible架构图 上图为ansible的基本架构,从上图可以了解到其由以下部分组成: 核心:ansible 核心模块(Core Modules):这些都是ansible自带的模块 扩展模块(C ...
- null,blank,default
null 是针对数据库而言,如果 null=True, 表示数据库的该字段可以为空. blank 是针对表单的,如果 blank=True,表示你的表单填写该字段的时候可以不填,比如 admin 界面 ...
- 偏函数(partial)
from functools import partial def add(a,b,c,d): return a+b+c+d add = partial(add,1,2) print(add(3,4) ...
- 【Python】用python -m http.server 8888搭建本地局域网
python -m http.server 8888 由于工作中经常会用到局域网中同事之间互传文件,当文件太大时,可以采用局域网ftp之类的方式进行传输. 这里采用python的一个服务,可以快速的搭 ...
- 【CF1100F】Ivan and Burgers(线性基,分治)
题意:给定n个数,每个数为c[i],有q个询问,每次询问从第l个到第r个数字的最大xor和 n,q<=5e5,c[i]<=1e6,时限3s 思路:直接线段树维护区间线性基是3个log,会T ...
- python-zx笔记2-help
在cmd运行 查看模块的方法: help—查看模块的函数 1 help()