面向对象第四天

总感觉今天的学习效率不高,好多东西都不知道,像傻了一样。总结了一下今天的知识点,都是很琐碎的东西,为了以后还是决定记录一下。

一、上次课知识点补充

1.delete

可以删除对象的指定属性。  注意:在操作DOM对象时,只能删除通过"."或"[]"方式添加的自定义属性。

2.arguments

伪数组对象,用来存储实参。

arguments.callee:返回正在执行的函数

arguments.length:返回实参的个数

用途:可以用在不定项形参个数的函数实现。

二、新知识点

1. 构造函数的执行过程

(1) 先创建一个空对象;(2)将构造函数的作用域 交给 上述对象 || this -> 空对象;(3) 开始执行构造函数内部代码;(4) return this;

注意:在构造函数中,如果显式 返回一个 基本数据类型 数据 会被忽略掉。当然返回对象就不会。

2. 表格案例

<!DOCTYPE html>

<html lang="en">
<head>
<meta charset="UTF-8">
<title>表格</title>
<link rel="stylesheet" href="table.css">
</head>
<body>
<div id="userList"></div>
<script>
/*
1. 实现一个对象来创建表格
2. 通过 组合方式创建对象
3. 表格的头 (可配置 宽 显示文本 对齐方式 列显示的顺序)
4. 给Table构造函数 定义形参,对象--内部的属性 为表格的配置项
5. 实现renderHead方法
6. 实现renderBody方法
7. 实现draw方法
*/
// 1
function Table(config) {
// 用户配置信息 存储到 Table对象上 ==》this
// 过滤无效参数
if (!config || !config.target || !config.data || !config.model) {
console.info("参数异常。");
return this;
}
this.target = config.target;
this.model = config.model;
this.data = config.data;
this.tclass = config.tclass;
// 创建表格标签,并保存到 this上
this.table = document.createElement(‘table‘);
// 如果指定表格的样式
if (this.tclass) {
this.table.className = this.tclass;
}
}
// 2:
Table.prototype = {
constructor: Table,
// 渲染表格头
renderHead: function() {
var tHead = document.createElement(‘thead‘),
tr = document.createElement(‘tr‘),
th;

tHead.appendChild(tr);
// 遍历列信息
for (var i = 0, l = this.model.length; i < l; i++) {
var temp = this.model[i]; // 临时存储当前编列的列信息
// 创建列
th = document.createElement(‘th‘);
// 显示文字
th.innerHTML = temp.title;
// 如果用户指定列宽度
if (temp.width) {
th.style.width = temp.width + ‘px‘;
}
// 如果指定列对齐方式
if (temp.align) {
th.style.textAlign = temp.align;
}
// 将当前创建的列添加到tr上
tr.appendChild(th);
}
// 把thead添加到table上
this.table.appendChild(tHead);
// 测试
// document.querySelector(this.target).appendChild(this.table);
},
// 渲染表格体
renderBody: function() {
var tBody = document.createElement(‘tbody‘),
tr,
td;
// a: 遍历数据
for(var i = 0,l = this.data.length;i < l;i++){
// 创建数据行
tr = document.createElement(‘tr‘);
for(var j = 0,ml = this.model.length; j < ml; j++){
td = document.createElement(‘td‘);
td.innerHTML = this.data[i][ this.model[j].prop ];
tr.appendChild(td);
}
tBody.appendChild(tr);
}
this.table.appendChild(tBody);
},
draw: function() {
this.renderHead();
this.renderBody();
document.querySelector(this.target).appendChild(this.table);
}
};

var rdata = [{
name: ‘tom‘,
age: 18,
count: 100, // 在网站充值的 金币数量 100币 = 100 rmb
gender: ‘男‘,
address: ‘北京‘
}, {
name: ‘jim‘,
age: 22,
count: 0,
gender: ‘女‘,
address: ‘上海‘
}, {
name: ‘hanmei‘,
age: 20,
count: 100000,
gender: ‘男‘,
address: ‘天津‘
}];

var t = new Table({
target: "#userList", // 表格要渲染到的容器
model: [ // 表格头配置
// 第一列 title 显示文本
{
prop: "name", // 指定 渲染数据对象的 对应属性
title: "姓名", // 指定表头显示的文本
width: 100, // 指定列的宽
align: "center" // 指定表头文字对齐方式
}, {
prop: "age",
title: "年龄",
width: 80,
align: "right"
}, {
prop: "count",
title: "金币数",
width: 150
}, {
prop: "gender",
title: "性别",
width: 60,
align: "center"
}, {
prop: "address",
title: "地址",
width: 160,
align: "center"
}
],
data: rdata, // 指定表格体 数据部分
tclass: "gridtable" // 表格样式
});
t.draw();
</script>
</body>
</html>

3. 实力成员与静态成员

(1)概念:

实例成员:通过构造函数创建出来的对象上的成员,称为实例成员;

静态成员:函数对象上的成员,被称为静态成员。

(2)区别:实例成员必须先创建实例,再访问;而静态成员直接通过函数的名字即可访问。

在实际开发时,如果遇到工具类方法,此时可以考虑写成 静态成员。

静态成员 相对于 实例成员 好处为:不需要创建对象,直接通过函数名字来访问成员。

4. 递归:函数调用自己

案例1:求阶乘

function Factorial(n){

if(n<0) return undefined;

else if(n==0||n==1) return 1;

else return Factorial(n-1)*n;

}

console.log(Factorial(5));

案例2:等差数列: 求等差数列的第n项值

//n:表示第几项   v:初始值   d:等差

function Arithmetic(n,v,d){

if(n<1) return undefined;

else if(n==1) return  v;

else return Arithmetic(n-1,v,d)+d ;

}

console.log(Arithmetic(5,2,3));

案例3:递归-遍历后代

function  printChildren(node){

var node;

if(node.firstChild){   //如果 node有第一个子节点,表明其有后代节点

nodes=node.childNodes;     // 获取当前node的所有节点,然后遍历

for(var i=0;l=nodes.length,i<l;i++){

console.log(nodes[i]); //打印节点

if(nodes[i].firstChild)  printChildren(nodes[i]);

}

}

}

printChildren(document.getElementById(‘dv‘));

5. 词法作用域

定义:变量的作用域 是由代码 书写的位置决定 而不是 变量被使用的位置决定;只有函数可以限定作用域。

包括全局作用域和局部作用域。

6. js中的预解析

词法分析:在此阶段。如果代码有语法错误会直接抛出异常

预解析会变量名提升和函数名提升

7. in简介

语法: in 左边的操作数必须为 字符串类型 ,表示属性的名字,如果不是,会尝试将其转换成字符串,如果失败了,就报错。

右边的操作数 为 对象。不为对象,报错。

含义:判断对象是否能访问到该属性,如果能,就返回true,否则返回false。

8. 小知识点

声明的全局变量都是 window对象的属性; 函数的名字 存储的是 函数对象的地址。

时间: 2025-01-15 13:07:49

面向对象第四天的相关文章

java学习之面向对象的四个特性

对象:由行为.状态和唯一标志组成. 一 抽象    抽象是忽略一个主题中与当前目标无关的方面,把现实世界中的概念转换为对象,可以是表示数据的VO对象或抽象类,也可以是表示一类行为的接口.有利于从众多变化的状态中抽离出不变的东西.有利于使用继承来构造类的体系,实现多态,使用模板和工厂模式方法来实现对业务过程的抽象.抽象是概念建模和业务流程建模很重要的工具,是面向对象体系的基石,而不是一堆杂乱.混乱.重复.散沙般的.关系错综复杂的类. 二 继承    是一种连结类的层次模型,并且允许和鼓励类的重用,

面向对象第四次总结性博客

测试与正确性论证 首先我们先来说一下这两个概念的差异所在.所谓测试,是指:基于前置条件和后置条件对输入划分并抽样产生测试数据,检查方法执行输出是否满足后置条件.而正确性论证,是指:针对格式化的规格和代码实现,人工方式对代码逻辑进行分析,确认是否所有满足前置条件的输入都能产生满足后置条件的结果. 然后我们来谈一下两者的优缺点.测试的优点在于易于实施,这也是其在工程中被广泛使用的原因:而它的缺点在于无法保证正确性,毕竟只是对于输入的抽样测试,可能无法真正地从代码层面来找出程序设计的错误.对于正确性论

面向对象第四次博客

测试与正确性论证差异对比 测试指为检测目标是否符合标准而采用特殊工具和方法进行验证.测试的优点在于你可以不用知道程序是如何实现的,直接输入测试样例,然后比较程序运行结果和正确结果,如果两者不同,就说明程序肯定有BUG.从中我们知道测试是快速方便的,它可以检测并定位一个程序的BUG.但是测试的效果很大程度取决于测试样例是否完善,如果不完善,就会遗漏一些潜在的致命的BUG,这也是测试最大的缺点.若要达到很好的测试效果,需要构造规模庞大的测试用例,这会消耗很多精力,而且你并不能保证这个庞大的测试用例已

#5 Python面向对象(四)

前言 本节将是Python面向对象的最后一篇博文了,这节将记录类的特殊方法.特殊成员方法.旧类和新类的不同,以及一些其他知识.Go! 一.类的特殊方法 Python有三种特殊方法:实例方法.静态方法.类方法.如果你读过一些源代码,你一定疑惑过这些代码:@staticmethod.@classmethod,前面见到的所有方法都是实例方法,实例方法的第一个参数为实例本身(self),由于实例方法经过前面几节已经掌握,所有本节将会熟悉剩下的两种特殊方法 1.1 静态方法 之前在类中编写的各种方法其实都

【php】面向对象(四)

知识点:ai一. a => abstract(抽象类) a) 抽象类的修饰符,修饰类和成员方法 b) 注意:被修饰的类不能被实例化,被修饰的方法不能有程序体 c) 如果某一个类使用abstract进行了修饰,则说明他内部有未完成的成员方法,两种解决方案,要么我们在本类中把未完成的方法实现,要么,我们让子类来继承他,完成未完成的功能,才可以实例化!二. I => interface(接口) a) Interface声明的是一个接口类 b) Interface当中只能包含常量定义,和成员方法 c)

面向对象第四次实验

实验四 静态成员与友元 1.实验目的(1)学习静态成员的使用,理解静态成员的特殊用途.(2)学习友元函数及友元类,领会友元类的作用.2.实验内容        应用VC++6.0的编辑环境构造一个类Stack,设计一个整数链表类,实现栈操作.类中需有记录结点个数的数据成员(静态成员),要有判空操作.编制应用程序,取100次随机数(<1000),如果取到的随机数比前一个随机数大的话,入栈,然后逐个取出(即出栈过程)求其和.        用堆分配方法逐个产生满足条件(递增有序)的结点,插入栈中,每

Day09_面向对象第四天

1.多态的概念和前提(掌握) 1.概念-什么是多态(掌握)  对象在不同时刻表现出来的不同状态. 2.针对引用类型的理解 编译期间状态和运行期间状态不一样 比如 Person p = new Person();//第一行 p = new Man();//第二行 p = new Woman();//第三行 p在第二个代表的是男人,在第三行代表的是女人. 3.举例 水(水,冰,水蒸气) 狗:狗是狗,狗是动物,狗是宠物,狗是食物//该处强调谁是谁的一种 4.前提条件(掌握) A:要有继承关系或实现关系

面向对象(四) is和as运算符,类库,委托

一.is 和 as 运算符 1.object数据类型 object是所有数据类型的基类,所有数据类型都是从object中衍生出来的.所有数据类型都是object的子类型. 比如数组在添加数据时,默认就是object类型的数据,系统会隐式转换为数据对应的类型. 基类可以隐式转换为子类,但子类无法隐式转换为基类. 如果一个数组中的数据的类型未知,那么提取数据时就需要先判断和转换数据类型,这个时候就会用到is和as运算符. 2.is运算符 is运算符用于判断一个数据是否是某个数据类型. 对象 is 类

面向对象第四章

1.package: 1)作用:避免类名的冲突 2)包名可以有层次结构 3)类的全称: 包名.类名,同包中的类不能同名 4)建议:包名所有字母都小写 import: 1)同包中的类可以直接访问, 不同包中的类不能直接访问,想访问有如下两种方式: 1.1)先import声明类再直接使用类------建议 1.2)类的全称------------------------太繁琐.不建议 2.访问控制修饰符: 1)public:公开的, 任何类 2)private:私有的, 本类 3)protected