`
summer_021
  • 浏览: 58035 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

JS学习笔记_基础篇_2

阅读更多
var add = function(num, num2, num3) {
				alert(num + num2 + num3);
			}
			
			//add   指向函数对象的引用.  add.lenth:期望接收的参数个数.  arguments.length:实际接收的参数个数
			alert(add.length);
			add(1, 2, 3);
			
			
			//此时希望接收参数个数为0
			var add2 = function() {
			
			}
			
			alert(add2.length);

//逻辑表达式不返回null,Undefined  就为真,if(4) if(aaa) 都为真
  var s = false;

  alert(s);

  var s = "hello"; // s是原始类型(String),也可以使用单引号定义

  alert(typeof s);//typeof:一元运算符以,用于获取变量的数据类型
  //其返回值有5个:undefined、boolean、number、string以及object(全部小写)

  var s = new String("hello"); //s是对象类型(Object),js所有的对象都是Object继承下来的

  alert(typeof s);

  var s = false;

  alert(typeof s);

  var s = 3;

  alert(typeof s);

  
  function add()
  {
	return 3;
	//return;
  }
 
  alert(add());//如果没有显式返回值(或就一个return) 则返回undefined

  alert(typeof ss);//未定义的变量  此时 打印:undefined

  alert(undefined == null);//为ture,undefined从null派生出来的

  var s = Number(3);

  alert(s);//打印数字3

  var s = Boolean("hello");

  alert(s);//打印为ture,非null,Undefined就为ture

  var s = new String("hello");

  alert(typeof s);//为Object
  
   var s = String("hello");

  alert(typeof s);//为String : 表示强转

  
  var s = new Boolean("hello");

  alert(s);//true;
  alert(typeof s);//为object
  
 // var object = new Object();//所有的类都是从Object继承的,生成Object实例的方法


  var object = new Object();

  for(var v in object)
  {
	alert(v);//in  遍历类中的属性,但是对于Object类 这种方法打印不出来(无法枚举出来
	//  能枚举出来的 就可以打印出来                                             
  }

  //alert(object.propertyIsEnumerable("prototype"));//判断某个属性是否可以枚举出来  不可枚举  打印结果为false



  //for  in  枚举 window 对象的属性, window 是个内置对象,不用new 直接用就可以了
  //window 对象 可枚举属性
  for(var v in window)
  {
	//alert(v);
  }


	alert("window");

  var object = new Object();
  
  //alert(object.username);
  object.username = "guojie";//添加属性的两种方式, 动态语言:对象生成后还可以添加属性
  object["username"] = "shengsiyuan";
  alert(object.username);
  delete object.username; // username属性已经从object对象中删除
  alert(object.username);//undefined


  // 在JavaScript中定义对象的最常见的方式
  //多对属性之间用逗号隔开
  var object = {username: "zhangsan", password: 123};
  alert(object.username);
  alert(object.password);

// array 指向 new 出来的 那个对象的引用
//  可扩容(与Java不同)
var array = new Array();

array.push(1);
array.push(2);
array.push(3);

alert(array.length);

//定义数组的第二种方式,常用
var array = [1, 3, 25];
//对原数组排序.
array.sort();//升序  1 , 25 , 3  并不是按照大小排序的, 调用toString 然后比较

alert(array);

//编写自己的排序方法
function compare(num1, num2)
{
	var temp1 = parseInt(num1);
	var temp2 = parseInt(num2);

	if(temp1 < temp2)
	{
		return -1;//无需交换
	}
	else if(temp1 == temp2)
	{
		return 0;
	}
	else
	{
		return 1;//交换顺序
	}
}

var array = [1, 3, 25];

array.sort(compare); 

alert(array);

var array = [1, 3, 25];

// 匿名函数  相当于Java中的匿名类
array.sort(function(num1, num2)
{
	var temp1 = parseInt(num1);
	var temp2 = parseInt(num2);

	if(temp1 < temp2)
	{
		return -1;
	}
	else if(temp1 == temp2)
	{
		return 0;
	}
	else
	{
		return 1;
	}
}
);

alert(array);

//此种方式弊端:再要一个对象 则 属性都要写一遍
				var object = new Object();
				//添加属性 name
				object.name = "zhangsan";
				//添加一个方法. 动态语言,可以先生成对象  再 生成属性
				object.sayName = function(name) {
					this.name = name;
					alert(this.name);
				}
				
				object.sayName("lisi");

//工厂方式创建对象
//工厂方法. 调用此工厂方法 就能创建对象
function createObject()
{
	var object = new Object();

	object.username = "zhangsan";
	object.password = "123";

	object.get = function()
	{
		alert(this.username + ", " + this.password);
	}

	return object;
}

var object1 = createObject();
var object2 = createObject();

object1.get();//会被下面的覆盖掉,打印出来为未定义


//调用的时候可以传参
function createObject(username, password)
{
	var object = new Object();

	object.username = username;
	object.password = password;

	object.get = function()
	{
		alert(this.username + ", " + this.password);
	}

	return object;
}

var object1 = createObject("zhangsan", "123");
object1.get();


/**
 * 方法一份,方法定义在外面
 * 属性 每个对象独享爱
 * @memberOf {TypeName} 
 */
function get()
{
	alert(this.username + ", " + this.password);
}

function createObject(username, password)
{
	var object = new Object();

	object.username = username;
	object.password = password;

	object.get = get;//不能加括号

	return object;
}
//没有new动作,需要显示return
var object = createObject("zhangsan", "123");
var object2 = createObject("lisi", "456");

object.get();
object2.get();

function Person()
{
    //使用new的方式生成对象 :在执行第一行代码前,js引擎会为我们生成一个对象
	this.username = "zhangsan";
	this.password = "123";

	this.getInfo = function()
	{
		alert(this.username + ", " + this.password);
	}
	//不需显示return
	//此处有一个隐藏的return语句,用于将之前生成的对象返回
}

var person = new Person();//使用new的方式
person.getInfo();//会被下面的覆盖掉


function Person(username, password)
{
	this.username = username;
	this.password = password;

	this.getInfo = function()
	{
		alert(this.username + ", " + this.password);
	}
}

var person = new Person("zhangsan", "123");
person.getInfo();

//使用原型(prototype)方式创建对象

//prototype  属性 是 Object 对象里拥有的  所以 每个对象都有这个属性
function Person()
{

}
//在函数的外面进行扩充
//prototype的特性
Person.prototype.username = "zhangsan";//给 Person对象的prototype赋上username属性,就宣称:Person对象 拥有username属性
Person.prototype.password = "123";

Person.prototype.getInfo = function()
{
	alert(this.username + ", " + this.password);
}

var person = new Person();//生成对象 与 构造函数方法一样
var person2 = new Person();

person.username = "lisi";

person.getInfo();
person2.getInfo();


/**
 * 单纯使用prototype生成对象  1: 无法传参  2: 导致程序错误:属性所有对象共享
 */
function Person()
{

}

Person.prototype.username = new Array();
Person.prototype.password = "123";

Person.prototype.getInfo = function()
{
	alert(this.username + ", " + this.password);
}

var person = new Person();
var person2 = new Person();

person.getInfo();
person2.getInfo();

// 只对person修改  person2也影响,通过原型方式生成对象:属性所有对象共用  对于字符串类型的不影响(password)
person.username.push("zhangsan");
person.username.push("lisi");
person.password = "456";

person.getInfo();
person2.getInfo();

//使用原型+构造函数方式来定义对象
function Person()
{
	this.username = new Array();
	this.password = "123";
}

/**
 * 方法放原型里面,属性放构造函数中
 * 这样:属性每个对象独享,方法共享
 * @memberOf {TypeName} 
 */
Person.prototype.getInfo = function()
{
	alert(this.username + ", " + this.password);
}

var p = new Person();
var p2 = new Person();

// 这样 两个username属性互不影响了
p.username.push("zhangsan");
p2.username.push("lisi");

p.getInfo();
p2.getInfo();

function Person()
{
	this.username = "zhangsan";
	this.password = "123";

	//只有创建第一个对象的时候创建方法,否则就不创建了
	if(typeof Person.flag == "undefined")
	{
		alert("invoked");
		
		Person.prototype.getInfo = function()
		{
			alert(this.username + ", " + this.password);
		}

		Person.flag = true;//方法生成一份后  就 置为true 或者 其他 非 undefined的. 修改的Peson类的flag 所以第二个对象会影响.
	}
}

var p = new Person();
var p2 = new Person();

p.getInfo();
p2.getInfo();

//继承第一种方式:对象冒充
//可以继承属性和方法
function Parent(username)
{
	this.username = username;

	this.sayHello = function()
	{
		alert(this.username);
	}
}

//username继承父类,password 子类特有
function Child(username, password)
{
	//下面三行代码是最关键的代码  把子类的属性 和方法 继承下来,这种方式可以实现多继承,
	//但是会把 后面父类的方法 替换掉前面父类的同名方法.
	this.method = Parent;//定义一个method属性,指向Parent函数的引用
	this.method(username);//给username赋值,把子类的this传递给父类的this,父类的this.username = username;变成子类的this.username = username;
	//同理 方法名也变成子类的
	delete this.method;//删除掉属性,也可以不删除

	this.password = password;//子类特有的

	this.sayWorld = function()//子类特有的
	{
		alert(this.password);
	}
}

var parent = new Parent("zhangsan");
var child = new Child("lisi", "1234");

parent.sayHello();//父类只有一个方法

child.sayHello();//子类就有两个方法
child.sayWorld();

//继承的第二种实现方式,call方法,Function对象中的方法
function test(str, str2)
{
	//this.name : 某一对象的name属性
	alert(this.name + ", " + str + ", " + str2);
}

var object = new Object();
object.name = "zhangsan";

//call是Function中的方法,因此每一个自定义函数都有call方法
//call函数: 第一个参数给this  第二个开始 逐个给参数赋值
//test.call相当于调用了test函数
test.call(object, "你好", "郭杰"); //将object赋给了this

//使用call方式实现对象的继承
function Parent(username)
{
	this.username = username;

	this.sayHello = function()
	{
		alert(username);
	}
}

function Child(username, password)
{
	Parent.call(this, username);//tihs:child对象.  这一行等于对象冒充里的3行

	this.password = password;

	this.sayWorld = function()
	{
		alert(this.password);
	}
}

var parent = new Parent("zhangsan");

var child = new Child("lisi", "123");//字符串单引号双引号都可以

parent.sayHello();

child.sayHello();
child.sayWorld();

//使用apply方法实现对象继承
function Parent(username)
{
	this.username = username;

	this.sayHello = function()
	{
		alert(this.username);
	}
}

function Child(username, password)
{
	Parent.apply(this, new Array(username));//apply和call一样定义在Function里面的,
	//child的this传给Parent 的this,则 Parent 的this就是子类的this了
	//第二个参数:以数组的形式传递过去
	//将多个参数放到数组里传递
	this.password = password;

	this.sayWorld = function()
	{
		alert(this.password);
	}
}


var parent = new Parent("zhangsan");
var child = new Child("lisi", "123");

parent.sayHello();

child.sayHello();
child.sayWorld();

//使用原型链(prototype chain)方式实现对象继承,无法传参数
//空的父对象
function Parent()
{

}
//对父对象进行扩展
Parent.prototype.hello = "hello";
Parent.prototype.sayHello = function()
{
	alert(this.hello);
}

function Child()
{

}
//继承父对象,子类的prototype指向父类对象.
//子类的prototype属性具有父类的prototype属性了
Child.prototype = new Parent();

Child.prototype.world = "world";
Child.prototype.sayWorld = function()
{
	alert(this.world);
}

var child = new Child();

child.sayHello();
child.sayWorld();

//使用混合方式实现对象继承(推荐)

function Parent(hello)
{
	this.hello = hello;
}

Parent.prototype.sayHello = function()
{
	alert(this.hello);
}

function Child(hello, world)
{
	Parent.call(this, hello);//call实现属性的继承.第一个当前对象,后面传参数,可以多个

	this.world = world;
}

Child.prototype = new Parent();//prototype实现方法的继承

Child.prototype.sayWorld = function()
{
	alert(this.world);
}

var child = new Child("hello", "world");

child.sayHello();
child.sayWorld();

//父类edge  表示有多少条边
function Shape(edge)
{
	this.edge = edge;
	this.sayEdge = function()
	{
		return this.edge;
	}
}
//附加一个方法:定义返回面积.
//高级语言中做成接口,这里返回-1,没有意义
Shape.prototype.getArea = function()
{
	return -1;
}
//附加第二个方法,拿到边数
Shape.prototype.getEdge = function()
{
	return this.edge;
}

//三角形边数固定  3
function Triangle(bottom, height)
{
	//边数变为3
	Shape.call(this, 3);

	//声明两个成员变量
	this.bottom = bottom;
	this.height = height;
}

//定义获得面积的方法.
//new Shape:继承里面所有的方法.

//重写里面获得面积的方法,不用重写拿到边数的方法
Triangle.prototype.getArea = function()
{
	return 0.5 * this.bottom * this.height;
}


//三角形的底和高
var triangle = new Triangle(10, 4);
alert(triangle.sayEdge());//没有用父类prototype附件的方法,可以不用new父类了.sayEdge  非 getEdge
alert(triangle.getArea());


//四边形
function Rectangle(bottom, height)
{
	//四边形
	Shape.call(this, 4);

	this.bottom = bottom;
	this.height = height;
}

Rectangle.prototype = new Shape();//要是父类的prototype附件的方法继承下来,必须还这么new一下.

//重写getArea方法
Rectangle.prototype.getArea = function()
{
	return this.bottom * this.height;
}
var rectangle = new Rectangle(20, 40);
alert(rectangle.getEdge());
alert(rectangle.getArea());

 function showLog(message)
 {
	 //albert 调试弊端:会跳出模态的对话框
	 //此种调试IE不支持
	 // fire bug  特有 调试用  console
	console.log(message);
	console.info(message);
	console.warn(message);
	console.error(message);
	console.debug(message);
 }

//生成对象第一种方式:生成对象 附加属性:适合临时生成对象
//prototype方法:适合对已有对象扩充方法,不适合扩展属性!!

//对象继承原理:使父对象中的this 变成子类的this
 function test(name)
 {
	showLog(name);
 }

 test("hello");

分享到:
评论

相关推荐

    李立超JavaScript基础篇笔记

    JavaScript,简称JS,是由Brendan Eich在1995年创造的一种高级编程语言,最初目的是为了增强网页的交互性,特别是在前端进行表单验证。...这些类型构成了JS编程的基础,理解和掌握它们是学习JavaScript的第一步。

    Gwt-ext学习笔记之基础篇

    ### Gwt-ext学习笔记之基础篇 #### 一、安装CypalStudio工具 为了能够开始Gwt-ext的学习之旅,首先需要确保开发环境已经搭建好。CypalStudio是一款非常实用的工具,它能帮助开发者更高效地进行GWT项目的开发。 1....

    web学习笔记 —— javascript基础

    这篇“web学习笔记——javascript基础”将带你走进JavaScript的世界,理解其基本概念和常用语法。 JavaScript语法基础: 1. 变量:在JavaScript中,变量用于存储数据。声明变量使用`var`关键字,例如`var myVar = ...

    Web前端JavaScript基础学习笔记

    这个学习笔记是我基于B站视频Mosh的JavaScript基础篇学习记录的一些笔记和代码。 内容不多,也就作为一个大家学习的参考。 免费的笔记,如果你喜欢,请和大家分享这个资源,谢谢。 视频链接:...

    前端学习笔记-黑马程序员JS

    "前端学习笔记-黑马程序员JS" ...这篇前端学习笔记涵盖了 JavaScript 的基础知识,包括变量、数据类型、运算符、流程控制、数组、函数、对象、内置对象和 Web APIs 等知识点,为学习 JavaScript 提供了系统的指导。

    javascript学习笔记.docx

    这篇学习笔记主要涵盖了JavaScript的基础语法和客户端JavaScript的相关知识。 1. **JavaScript基本语法**: - **变量声明**:未声明的变量尝试读取时会产生错误,而写入未声明的变量会创建一个全局变量。 - **...

    JavaScript李立超基础篇笔记.docx

    总的来说,李立超的JavaScript基础篇教程涵盖了语言的基础知识,包括其历史、特点、基本语法、数据类型、变量和标识符的使用,以及代码编写的位置和方式,是学习JavaScript入门的宝贵资料。通过深入理解和实践这些...

    Gwt-Ext学习笔记之基础篇- www.hxiaseo.cn技术网站

    标题中的"Gwt-Ext学习笔记之基础篇"指的是关于Gwt-Ext的初级教程,这是一种基于Google Web Toolkit (GWT) 的扩展库,用于构建富互联网应用程序(RIA)。Gwt-Ext提供了丰富的用户界面组件,使得开发者可以利用Java语言...

    Javascript基础学习笔记(菜鸟必看篇)_.docx

    这篇基础学习笔记主要涵盖了JavaScript的一些核心概念,对于初学者来说是非常实用的引导资料。 1. 变量: 变量是JavaScript中存储数据的基础单元,它们可以用来保存各种类型的信息。变量需要先声明后使用,声明时...

    JavaScript高级程序设计2,学习笔记---第一篇

    这篇学习笔记将带你探索JavaScript的核心概念,包括变量、数据类型、控制流、函数、对象和类等,这些都是构建复杂应用程序的基础。 首先,我们要了解JavaScript的基础语法。在JavaScript中,变量是存储数据的容器,...

    js模块编程学习笔记

    本篇笔记主要基于阮一峰的博客,探讨了两种常见的JS模块规范:CommonJS和AMD,以及如何使用require.js进行模块管理。 1. **CommonJS**:这是Node.js服务器端编程广泛采用的模块化标准。在CommonJS中,`require()`...

    JavaScript 入门 新手学习笔记

    这篇"JavaScript入门新手学习笔记"提供了全面的学习资源,适合初学者系统性地掌握这一技术。 笔记可能包含了以下关键知识点: 1. **基础语法**:JS的基础包括变量(var、let、const)、数据类型(如字符串、数字、...

    JavaScript学习笔记之总结与回顾(学习JavaScript基础知识看这一篇就够了,文章总字数2.8万)源码

    这篇“JavaScript学习笔记之总结与回顾”涵盖了从基础到进阶的广泛内容,总计2.8万字,旨在为学习者提供一个全面的理解JavaScript的平台。 在学习JavaScript时,首先会接触的是基本的语法结构,包括常量、变量和...

    JavaScript学习笔记

    JavaScript学习笔记主要涵盖...通过阅读和理解这篇"JavaScript学习笔记",你可以逐步提升JavaScript技能,从而更好地开发网页和应用程序。记得实践是检验真理的唯一标准,多写代码,多解决问题,才能真正掌握这门语言。

    Redis全套学习笔记 (带章节目录) 完整版pdf

    本文是一篇关于Redis全套学习笔记的文章,主要介绍了Redis的基础知识、数据结构、持久化、集群、高可用、性能优化等方面的内容。通过本文的学习,读者可以全面掌握Redis的使用和应用,提高自己的技术水平和实践能力...

    Yui_ext 学习笔记

    这篇学习笔记主要介绍了 Yui_ext 的基础知识,适合对 JavaScript 和 HTML DOM 有一定了解的初学者。 首先,了解 Ext 库的基本概念。Ext 提供了一个强大的框架,用于创建具有丰富用户体验的网页应用,其核心是 ...

    蓝杰JavaScript学习笔记

    《蓝杰JavaScript学习笔记》是一份综合性的JavaScript学习资料,主要涵盖了JavaScript在网页动态操作、DOM操作以及事件处理等方面的基础知识。这篇笔记通过多个实例文件,如`dynamicCreateTable.htm`、`...

    Vue学习笔记之分享篇.zip

    在"Vue学习笔记之分享篇.zip"这个压缩包中,我们可以期待获取到关于Vue.js的学习资料,包括文档、安装程序以及可能的代码示例。 首先,`Vue.docx`可能是作者整理的Vue学习笔记,里面可能包含了Vue的基础概念、核心...

    JavaScript零基础学习(超详细)

    根据pink老师的课程做的学习笔记 学习JavaScript看这篇就够了

    前端基础学习笔记,pdf

    这篇学习笔记涵盖了JavaScript的基础知识,以及与前端开发相关的其他重要概念。 JavaScript是ECMAScript的一个实现,是一种解释型的、基于原型的、动态类型的编程语言。它的发展史与浏览器密切相关,从最初的...

Global site tag (gtag.js) - Google Analytics