JS面向(基于)对象编程--构造方法(函数)
构造函数(方法)介绍
什么是构造函数呢?在回答这个问题之前,我们来看一个需求:前面我们在创建人类的对象时,是先把一个对象创建好后,再给他的年龄和姓名属性赋值,如果现在我要求,在创建人类的对象时,就直接指定这个对象的年龄和姓名,该怎么做?
构造函数(方法)是一种特殊的方法,它的主要作用是完成对对象实例的初始化。它有几个特点:
构造函数(方法)名和类名相同。
在创建一个对象实例时,系统会自动的调用该类的构造方法完成对新对象的初始化。
构造函数基本用法:
function 类名(参数列表){
属性=参数值;//不带this为私有,带有this为共有。
}
如下例:
function Person(name, age) {
this.name = name;//this指代当前对象(即实例化的对象)
this.age = age;
}
//创建Person对象的时候,就可以直接给名字和年龄
var p1 = new Person("abc", 80);
var p2 = new Person("hello", 9);
window.alert(p2.name);
当然,在给一个对象初始化属性值的时候,也可以指定函数属性。如下例:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>构造函数</title>
<script type="text/javascript">
function jiSuan(num1, num2, oper) {
if(oper == "+") {
return num1+num2;
} else if(oper == "-") {
return num1-num2;
} else if(oper == "*") {
return num1*num2;
} else if(oper == "/") {
return num1/num2;
}
} function Person(name, age, fun) {
this.name = name;
this.age = age;
this.myFun = fun;
}
var p1 = new Person("aa", 9, jiSuan);
var p2 = new Person("aa", 9, null);
// window.alert(p1.name);
// window.alert(p1.myFun(89, 90, "+"));
window.alert(p2.myFun(1, 2, "*"));//Uncaught TypeError: p2.myFun is not a function
</script>
</head>
<body> </body>
</html>
构造方法(函数)小结
构造方法名和类名相同
主要作用是完成对新对象实例的初始化
在创建对象实例时,系统自动调用该对象的构造方法
类定义的完善:
在介绍了构造函数(方法)后,我们类(原型对象)的定义就可以完善一步:
function 类名() {
属性;
}
↓
function 类名() {
属性;
函数(方法);
}
↓
function 类名(参数1, 参数2, ...) {
属性 = 参数1;
函数(方法) = 参数2;
}

面向对象编程进一步认识:
创建对象的又一种形式:
1、对于比较简单的对象,我们也可以这样来创建(可以指定普通属性和函数属性),如:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>构造函数</title>
<script type="text/javascript">
var dog = {name:"小狗",
age:8,
fun1:function(){window.alert("hello,world");},
fun2:function(){window.alert("ok");}
};
window.alert(dog.constructor);
window.alert(dog.name+dog.age);
dog.fun1();
dog.fun2();
</script>
</head>
<body> </body>
</html>
2、有时,会看到这样一种调用方法:
函数名.call(对象实例);
例,
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>构造函数</title>
<script type="text/javascript">
var dog={name:'hello'};
function test(){
window.alert(this.name);
}
test();
window.test();
var name = "阿昀";
//test.call(window);//输出阿昀
test.call(dog); // <==> dog.test();
</script>
</head>
<body> </body>
</html>
3、for...in,如:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>构造函数</title>
<script type="text/javascript">
var dog = {name:'小名',
sayHello:function(a,b){window.alert("结果="+(a+b));}
};
//循环列出dog对象的所有属性和方法 对象名['属性名']
for(var key in dog){
window.alert(dog[key]);
}
</script>
</head>
<body> </body>
</html>
记住:可以使用该形式—对象名['属性名']—访问该对象中的属性和方法。
又如:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>构造函数</title>
<script type="text/javascript">
document.writeln("****当前浏览器window对象有属性和方法****<br/>");
for(var key in window){
document.writeln(key+":"+window[key]+"<br>");
}
</script>
</head>
<body> </body>
</html>
JS面向(基于)对象编程--构造方法(函数)的更多相关文章
- js面向(基于)对象编程—类(原型对象)与对象
JS分三个部分: 1. ECMAScript标准--基础语法 2. DOM Document Object Model 文档对象模型 3. BOM Browser Object Moldel 浏览 ...
- JS面向(基于)对象编程--三大特征
抽象 在讲解面向对象编程的三大特征前,我们先了解什么叫抽象,在定义一个类时候,实际上就是把一类事物的共有的属性和行为提取出来,形成一个物理模型(模板).这种研究问题的方法称为抽象. 封装 什么是封装? ...
- JavaScript学习总结(九)——Javascript面向(基于)对象编程
一.澄清概念 1.JS中"基于对象=面向对象" 2.JS中没有类(Class),但是它取了一个新的名字叫“原型对象”,因此"类=原型对象" 二.类(原型对象)和 ...
- JavaScript学习总结(5)——Javascript面向(基于)对象编程
一.澄清概念 1.JS中"基于对象=面向对象" 2.JS中没有类(Class),但是它取了一个新的名字叫"原型对象",因此"类=原型对象" ...
- JavaScript基于对象编程
js面向对象特征介绍 javascript是一种面向(基于)对象的动态脚本语言,是一种基于对象(Object)和事件驱动(EventDirven)并具有安全性能的脚本语言.它具有面向对象语言所特有的各 ...
- 《Essential C++》读书笔记 之 基于对象编程风格
<Essential C++>读书笔记 之 基于对象编程风格 2014-07-13 4.1 如何实现一个class 4.2 什么是Constructors(构造函数)和Destructor ...
- 借助boost bind/function来实现基于对象编程。
boost bind/function库的使用: 替换了stl中mem_fun,bind1st,bin2nd等函数.用户注册回调函数需要利用boost/bind转化成库中boost/function格 ...
- JS面向对像编程四—— prototype 对象
http://blog.csdn.net/fanwenjieok/article/details/54575560 大部分面向对象的编程语言,都是以“类”(class)作为对象体系的语法基础.Java ...
- 重学前端--js是面向对象还是基于对象?
重学前端-面向对象 跟着winter老师一起,重新认识前端的知识框架 js面向对象或基于对象编程 以前感觉这两个在本质上没有什么区别,面向对象和基于对象都是对一个抽象的对象拥有一系列的行为和状态,本质 ...
随机推荐
- XAML特殊字符
此部分只限制在XAML中,代码中不受此类限制. 1.特殊字符转义 XAML 特殊字符转义 特殊字符 转义 小于号 < < 大于号 > > 取址符 & & 引号 ...
- Question about pairing/bonding?
Except that on android you can bypass the pairing dialog if you know the PIN in advance through a di ...
- 013--VS2013 C++ 地图贴图-其它格式图片
//--------------------------------------------InitInstance() 函数------------------------------------- ...
- Zybo智能小车识别图像中的文字
智能小车识别图像中的文字 [TOC] 运行平台 这次的内容是基于Xilinx公司的Zybo开发板以及其配套的Zrobot套件开发 Zybo上面的sd卡搭载了Ubuntu12.04LTS的linux版本 ...
- 89C51单片机实现的流水灯
/*******************************************Copyright: 2014.02.09.version1.0File name: led.cDescrip ...
- .net sql 防注入 httpmodule
1 新建一个类,实现IHttpModule接口 using System; using System.Collections.Generic; using System.Linq; using Sys ...
- 11.3Daily Scrum
人员 任务分配完成情况 明天任务分配 王皓南 实现网页上视频上传的功能,研究相关的代码782 数据库测试 申开亮 实现网页上视频浏览的功能.研究相关的代码和功能.783 实现视频浏览的功能 王宇杰 负 ...
- shell脚本变量定义注意别跟系统变量重名了……
写了个很简单的脚本,执行结果却很奇怪. 1 #!/bin/bash PATH=$HOME/vlc_transplant4 rm -f $PATH/vlc ln -s $PATH/bin/vlc-s ...
- hibernate3连oracle的各种坑。。
坑一:驱动错误导致sql查询不了,升级驱动到最新版即可 2.通过构造函数封装数据时,如果报错无法实例化并且不是因为字段不对应导致的,可以试试把float改为Float之类的包装类
- 2.C#基础篇-->数据类型
C#数据类型分为:值类型,引用类型和指针类型(仅在不安全代码中使用) 1.值类型. 值类型包含:简单类型(整型,浮点类型和小数类型),枚举类型和结构类型.所有值类型都隐含的声明一个公共的无参构造函数, ...