首页 > 编程语言 >JavaScript如何定义类与函数如何实现继承自Object类实现方法------前端

JavaScript如何定义类与函数如何实现继承自Object类实现方法------前端

时间:2023-11-04 11:32:14浏览次数:51  
标签:function JavaScript Object alert var typeof ------ JS

HTML页面用于展示

<!DOCTYPE html>
<!-- 这是HTML的注释 -->
<html lang="en" id="myHtml">
	<head>
		<!-- 这里不是设置了编码,而是告诉浏览器,用什么编码方式打开文件避免乱码 -->
		<meta charset="UTF-8">
		<meta name="viewport" content="width=device-width, initial-scale=1.0">
		<title>HtmlAll</title>
		<!--
 		<script>
			alert("Head")
		</script> 
		-->
	</head>
	<body bgcolor="grey">
		<!-- 引入外部独立的JS代码,和我们直接写在script里面是一样的 -->
		<!-- 同一个js文件可以引入两次,但是没必要 -->
		<!-- 结束的script标签必须有,不能是单标签的 -->
		<!-- 引入了代码块后,script标签内的代码就不会被执行了 -->
		<script type="text/javascript" src="js.js">
			alert("js")
			// 暴露在脚本块之内的程序,在页面打开的时候执行,遵循自上而下的方式执行
			// 不需要事件(可以用来做特殊操作)
			// 脚本块放到Head里面甚至是HTML标签之外都可以执行
			// JS代码的注释方式和java是一样的
			// 还有alert方法会阻塞整个HTML页面的加载,直到我们按下确认为止
		</script>
		<!-- JS是一门事件驱动型的语言,依靠事件去驱动,然后执行相应的程序 -->
		<!-- 在JS中有许多事件用来触发,任何事件都会对应一个用来触发的事件句柄 -->
		<!-- 事件和事件句柄的区别是,句柄前面会有一个on比如说onclick -->
		<input type="button" onclick="Test()" value="加载了"/>
		<input type="button" value="Hello" onclick="sum(10)"/>
		<input type="button" value="Test" id="button" onclick="sayHello('zhangsan')"/>
		<input type="button" value="测试" onclick="test1('LISI')"/>
		<input type="button" value="按一下" onclick="access()"/>
		<input type="button" value="叫名字" onclick="sayName()"/>
		<input type="button" value="typeOf" onclick="T()"/>
		<!-- Undefined类型只有一个值,这个值就是undefined -->
		<!-- 当一个值没有手动赋值,系统默认赋值undefined -->
		<!-- 或者也可以给一个变量手动赋undefined -->
		<!-- Number类型包括那些值? -->
		<!-- 整数小数正数负数,不是数字(NAN),无穷大Infinity -->
		<input type="button" value="Number" onclick="cALL()"/>
		<!-- 关于什么情况下出现nan,但运算结果不是一个数字的时候结果是nan -->
		<!-- 当运算结果应该是一个数字最后却不是数字就是nan -->
		<input type="button" value="nan()" onclick="nan()"/>
		<!-- 当除数为零的时候,结果为无穷大,Java中报错,但是在JS中是无穷大Infinity -->
		<input type="button" value="Infi()" onclick="Infi()"/>
		<input type="button" value="isNan" onclick="isN(12,'abs')"/>
		<input type="button" value="Int" onclick="fl()"/>
		<input type="button" value="flag" onclick="flag()"/>
		<input type="button" value="bTes" onclick="bTest()"/>
		<input type="button" value="sts" onclick="sy()"/>
		<input type="button" value="stest" onclick="SP()"/>
	</body> 
</html>
 
<!-- <script>
	alert("outside")
</script> -->

JS代码实现效果

// 标识符必须由数字字母下划线美元符号组成,别的符号不允许
// 不能以数字开头
// 严格区分大小写
// 标识符不能用关键字做标识符
// 理论上没有长度限制
// 类名和接口首字母大写,后面每个单词首字母大写
// 方法名和变量名,首字母小写,后面每个单词首字母大写
// 所有的常量名,全部大写,单词和单词之间用下划线隔开
// 驼峰命名,见名知意
// java是一种强类型语言,java存在编译阶段
// 在java中,在编译阶段就确定了变量类型,一旦确定类型就无法转换,语法类型转换,不是真转换
// int i = 10;double d = i;不是把i变量给了d,把i变量内容改变了
// 而是把i变量保存的值10给了变量d,i变量还是int类型,值为10
// byte short int long float double boolean char
// 1248 4812
// JS是一个弱类型语言,没有编译阶段,一个变量可以随意赋值,什么类型都行
// undefined在JS里面是一个具体的值,当我们没有给变量赋值的时候,他的值就是undefined
// java中我们写方法
// 修饰符列表 返回值类型 方法名(形式参数列表){方法体}
// public static boolean login(String username,String password){return true;}
//boolean flag = user.login(username,password);
//这里我们实际调用方法的时候传进去的就是实参,实际参数必须与形参一一对应
// function 函数名(形参类型){函数体}
 
function sum(a,b)
{
	// a和b都是变量名,他们都是形参,变量名随意
	// 这里我们可以使用typeof来判断或者说限定这里就是数字number
	// typeof的运算结果是六个字符串之一,字符串是全部小写的
	// 在JS中使用==来做字符串判断,没有equals方法(这是java的Object类的一个方法)
	var i = 100;
	if(typeof a == "number" && typeof b == "number")
	{
		alert(a + b);
	}
	else
	{
		alert("必须都是数字")
	}
}
 
function access()
{
	//这里访问的是全局变量
	alert(i);
}
 
function myFun()
{
	//如果一个变量在声明的时候没有加上var
	//那么无论在哪里声明的,他都是全局变量
	//而且还要被调用一次
	username = "jack";
	//需要调用一次
	myFun();
}
 
function sayName()
{
	// 就近原则访问Rose局部变量
	// var username = "Rose";
	alert(username);
}
 
function count(a,b)
{
	return a + b;
}
 
// JS中的函数不需要重载(重载是方法名相同,形参不同(可以是数量,类型,顺序不同))
// 调用函数count
 
function sayHello(username)
{
	alert("hello" + username);
	var w = count(10,30);
	alert(w);
	// var ret = count("jack");
		var ret = count();
	// 一个值赋值了,另一个值没赋值默认undefined
	// 形成了字符串拼接
	// NaN是一个具体存在的值,表示该值不是数字
	alert(ret)
	var sum = count(1,2,3);
	//超过了数量,只用了前面的
	// js的函数调用时,参数类型没有限制,参数个数没有限制
	alert(sum)
}
 
function TestI()
{
	var i = 100;
	i = false;
	i = "abc";
	i = new Object();
	i = 3.14;
	alert(i)
}
 
function Test()
{
	var a,b,c = 200;
	alert(undefined);
	alert("a =" + a);
	alert("b =" + b);
	alert("c =" + c);
	// 一个值我们没声明直接用,就会报错
	// alert(age);
}
 
function test1(username)
{
	alert(username)
}
 
// js中同名函数会彼此覆盖
// 后声明的会覆盖前面的函数,谁后谁做主
//直接从内存中抹去了之前的函数了
 
function test1()
{
	var u = sum(false,false);
	alert(u);
}
 
function T()
{
	var o;
	alert(typeof o);
	var p = 10;
	alert(typeof p);
	var k = "abc";
	alert(typeof k);
	var u = null;
	alert(typeof u);
	var f = true;
	alert(typeof f);
	var obj = new Object();
	alert(typeof obj);
	function sHello(){}
	alert(typeof sHello())
}
 
function cALL()
{
	var v = 1;
	alert(typeof v);
	var v1 = 3.14;
	alert(typeof v1);
	var v2 = -100;
	alert(typeof v2);
	var v3 = NaN;
	alert(typeof v3);
	var v4Infinity = Infinity;
	alert(typeof v4Infinity);
}
 
function nan()
{
	var i = 10;
	var e = "abc";
	alert(i / e);
	alert(e + i);
}
 
function Infi()
{
	var i = 0;
	var p = 10;
	alert(p / i);
}
 
function isN(a,b)
{
	// 当我们isNaN()返回true,就代表不是一个数字
	if(isNaN(a) || isNaN(b))
	{
		alert("参与运算的必须是数字");
	}
	alert(a + b);
}
 
//pareseFloat可以将字符串自动转换成
function fl()
{
	// 将字符串转换为数字
	alert(parseInt("3.19999"))
	alert(parseInt(3.19999))
	alert(parseFloat(3.14 + 1))
	alert(parseFloat("3.14") + 1)
}
 
function flag()
{
	var username = "jack";
	if(username)
	{
		// 原因是浏览器自动将他转换为boolean类型,自动调用了boolean函数
		// 不写也会调用
		alert("欢迎" + username)
	}
	else
	{
		alert("用户名不为空")
	}
}
 
function bTest()
{
	alert(Boolean(1));//true
	alert(Boolean(0));//false
	alert(Boolean(""));//false
	alert(Boolean("abc"));//true
	alert(Boolean(null));//false
	alert(Boolean(NaN));//false
	alert(Boolean(undefined));//false
	alert(Boolean(Infinity));//true
	while(10 / 3)
	{
		//无限循环,因为始终有值且为true
		alert("hehe")
	}
}
 
//JS中String是一个内置的类,继承于Object类
function sy()
{
	//直接写出来的这种string字符串对象属于原始类型String
	var S = "abc";
	alert(typeof S);//得到String
	//new出来的String属于Object类型
	var s = new String("abc");
	alert(typeof s);//得到Object
	//无论小大String类型,他们的属性和函数都是通用的
	alert(S.length);
	alert(s.length);
}
 
function SP()
{
	//String常用函数
	//indexOf指定字符串在当前字符串第一次出现的索引
	//lastIndexOf指定字符串在当前字符串最后一次出现的索引
	//replace替换
	//substr截取子字符串指定开始index,指定字符串长度
	//substring从index到end处对字符串进行截取
	//toLowerCase小写
	//toUpperCase大写
	//split拆分字符串
	var os = "https://www.baidu.com"
	//从第四开始长度为5
	alert(os.substr(4,5));
	//从0开始到第四个字符
	alert(os.substring(0,4));
	alert(os.indexOf("https"));
	alert(os.indexOf("baidu.com") >= 0 ? "包含" : "不包含")
	var iu = new String("name=value%name=value%name=value");
	while(iu.indexOf("%") >= 0)
	{
		iu.replace("%","&");
		alert(iu);
	}
}
 
//Object是所有类型的超类,自定义的任何类型,默认继承Object
//prototype属性(常用的),作用是给类动态的拓展属性和函数
//constructor属性
//Object类包含哪些函数
//toString()valueOf()tolocaleString()
//JS中自定义的类默认继承Object,会继承Object类中所有的属性和函数
//换句话说,自定义的类也有prototype属性
// 定义方式function类名(形参)
//第二种方法类名 = function(形参){}
//创建对象的语法new 类名(实参)
function asdas()
{
	function sayHello(){}
	
	sayHello();//视为调用函数
	
	var obj = new sayHello();//这种方式视为创建对象
	//obj是一个引用,保存内存地址指向堆中的对象
	
	function Student(){alert("学生")}
	//当作函数
	Student();
	//当作类来创建对象
	var student = new Student();
	alert(student)
}
 
//在JS中,类的定义和函数的定义是放在一起的
function User(a,b,c)//三个形参
{
	//声明属性,代表当前对象
	// 三个属性
	this.sno = a;
	this.sname = b;
	this.sage = c;
}
 
function U()
{
	//创建对象
	var u1 =  new User(111,"zhangsan",30);
	//访问对象的属性
	alert("id" + u1.sno);
	alert("name" + u1.sname);
	alert("age" + u1.sage);
	
	var u2 =  new User(222,"2222",20);
	//访问对象的属性
	alert("id" + u2.sno);
	alert("name" + u2.sname);
	alert("age" + u2.sage);
	
	alert(u2["sno"]);
	alert(u2["sname"]);
	alert(u2["sage"]);
}
 
Emp = function(ename,sal)
{
	this.ename = ename;
	this.sal = sal;
}
 
function Tes()
{
	var e1 = new Emp("Smith",8000);
	alert(e1.sal);
	alert(e1.ename);
	alert(e1["ename"]);
	alert(e1["sal"]);
}
 
Product = function(pno,pname,price)
{
	//属性
	this.pno = pno;
	this.pname = pname;
	this.price = price;
	//函数
	this.getPrice = function(){
		return this.price;
	}
}
 
var pro = new Product(111,"西瓜",4.0);
var pri = pro.getPrice();
alert(pri);
 
Product.prototype.getPname = function()
{
	return this.pname;
}
 
var name = pro.getPname();
alert(name);
 
//这个可以给JS中任何Object的子类扩展
String.prototype.make = function()
{
	alert("这是给String扩展的")
}
 
"abc".make();
 
// JS的变量不需要指定数据类型,但是在赋值的时候,每一个数据还是有类型的
// JS数据类型有原始类型,引用类型
// 原始类型有undefined,Number,String,null,boolean
// 引用类型Object,以及Object的子类
//ES规范,在ES6之后添加了symbol类型
// JS有一个运算符叫typeof,可以在程序运行阶段获取变量数据类型
 
//全局变量和局部变量
//全局变量,浏览器打开声明,关闭时销毁,会一直在内存空间,耗费内存
// 非必要不要使用全局变量
//局部变量声明在函数内,函数开始执行时局部变量的内存空间开辟
// 函数结束后,内存空间释放,什么周期短
// 尽量使用局部变量

标签:function,JavaScript,Object,alert,var,typeof,------,JS
From: https://blog.51cto.com/u_16322355/8180946

相关文章

  • 汽车托运有什么陷阱
    汽车托运行业迅速发展,越来越多的汽车托运公司兴起,在给车主朋友带来便利的同时,许多车主朋友也在汽车托运上吃了亏。下面这4个托运陷阱,10个人有9个中招,一起往下看看吧~陷阱一:坑蒙车主,多次收费部分托运公司靠着客户不懂行情,看人看车定价。提醒大家托运前一定要看清合同上......
  • 汽车托运3种方式的对比
    汽车托运有以下几种托运方式:笼车托运,小板托运,火车托运;这几种托运方式的托运时长及托运费用都不一样。下面分别介绍一下,3种托运方式的优点及不便。①笼车托运。价格在1-2元/公里,笼车托运是目前主流的托运方式。笼车有上、下层之分,通常每次可运8-10部轿车。但由于托运的车较......
  • 基于Python+Pygame实现一个滑雪小游戏
    目录项目介绍Pygame介绍项目文件夹介绍演示视频代码免费领取一、项目介绍使用介绍:运行main.py文件后,通过左右按键可以控制小人的移动,如果经过旗杆那么+10分,如果碰到树木那么减50分。二、Pygame介绍Pygame是一个用于游戏开发和多媒体应用的Python库。它是基于SDL(Simple......
  • linux系统信息命令笔记
     1,时间和日期  2,磁盘信息  4,进程概念介绍4.1,ps基本命令使用 psaux显示内容太多了。一般用psa或psau 4.2,top命令的基本使用top可以动态的显示运行中的进程并排序,退出top,输出q 4.3,kill命令的基本使用PID是进程代号。kill指定代号:终止......
  • 【触想智能】工业显示器上市前的检测项目分享
    工业显示器在上市前,需要做一项重要的工作,那就是工业显示器出厂前的产品可靠性检测。工业显示器选择的测试项目相比商用端更为严格,常见的性能测试项目包括高温老化、防尘防水、电磁静电干扰、防摔防撞等,在工业级应用领域,它有另外一个叫法,即产品可靠性测试,能从侧面展现产品......
  • 基于MATLAB的单级倒立摆仿真(转)
    有关代码及word文档请关注公众号“挽风笔谈”,后台回复A010.02即可获取一、单级倒立摆概述倒立摆是处于倒置不稳定状态,人为控制使其处于动态平衡的一种摆,是一类典型的快速、多变量、非线性、强耦合、自然不稳定系统。由于在实际中存在很多类似的系统,因此对它的研究在理论上和......
  • 亲测可行,Android Studio 查看源码出现 Source for ‘Android API xxx Platform’ not
    亲测可行,AndroidStudio查看源码出现Sourcefor‘AndroidAPIxxxPlatform’notfound的解决方法如标题中的问题,产生的原因就是SDK源码目录下找不到对应版本的源码文件。解决方案一般就是下载对应版本的源码文件即可。这里主要是另一种情况,每次Google发布Android新......
  • elementUI button防止频繁点击
    importVuefrom'vue'constpreventReClick=Vue.directive('preventReClick',{ inserted:function(el,binding){  el.addEventListener('click',()=>{   if(!el.disabled){    el.disabled=true    setTi......
  • x86平台SIMD编程入门(1):SIMD基础知识
    1、简介SIMD(SingleInstruction,MultipleData)是一种并行计算技术,它通过向量寄存器存储多个数据元素,并使用单条指令同时对这些数据元素进行处理,从而提高了计算效率。SIMD已被广泛应用于需要大量数据并行计算的领域,包括图像处理、视频编码、信号处理、科学计算等。许多现代处理......
  • JavaSE day03【多态、内部类、 常用API】测评题
    选择题题目1(多选):下列关于多态的前提描述正确的是()选项:​ A.继承/实现关系​ B.子父类存在同名成员变量​ C.方法重写​ D.父类的引用指向子类的对象题目2(单选):下列关于多态成员访问的特点错误的是()选项:​ A.构造方法和继承一样,子类通过super()......