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,简称JS,是由Brendan Eich在1995年创造的一种高级编程语言,最初目的是为了增强网页的交互性,特别是在前端进行表单验证。...这些类型构成了JS编程的基础,理解和掌握它们是学习JavaScript的第一步。
### Gwt-ext学习笔记之基础篇 #### 一、安装CypalStudio工具 为了能够开始Gwt-ext的学习之旅,首先需要确保开发环境已经搭建好。CypalStudio是一款非常实用的工具,它能帮助开发者更高效地进行GWT项目的开发。 1....
这篇“web学习笔记——javascript基础”将带你走进JavaScript的世界,理解其基本概念和常用语法。 JavaScript语法基础: 1. 变量:在JavaScript中,变量用于存储数据。声明变量使用`var`关键字,例如`var myVar = ...
这个学习笔记是我基于B站视频Mosh的JavaScript基础篇学习记录的一些笔记和代码。 内容不多,也就作为一个大家学习的参考。 免费的笔记,如果你喜欢,请和大家分享这个资源,谢谢。 视频链接:...
"前端学习笔记-黑马程序员JS" ...这篇前端学习笔记涵盖了 JavaScript 的基础知识,包括变量、数据类型、运算符、流程控制、数组、函数、对象、内置对象和 Web APIs 等知识点,为学习 JavaScript 提供了系统的指导。
这篇学习笔记主要涵盖了JavaScript的基础语法和客户端JavaScript的相关知识。 1. **JavaScript基本语法**: - **变量声明**:未声明的变量尝试读取时会产生错误,而写入未声明的变量会创建一个全局变量。 - **...
总的来说,李立超的JavaScript基础篇教程涵盖了语言的基础知识,包括其历史、特点、基本语法、数据类型、变量和标识符的使用,以及代码编写的位置和方式,是学习JavaScript入门的宝贵资料。通过深入理解和实践这些...
标题中的"Gwt-Ext学习笔记之基础篇"指的是关于Gwt-Ext的初级教程,这是一种基于Google Web Toolkit (GWT) 的扩展库,用于构建富互联网应用程序(RIA)。Gwt-Ext提供了丰富的用户界面组件,使得开发者可以利用Java语言...
这篇基础学习笔记主要涵盖了JavaScript的一些核心概念,对于初学者来说是非常实用的引导资料。 1. 变量: 变量是JavaScript中存储数据的基础单元,它们可以用来保存各种类型的信息。变量需要先声明后使用,声明时...
这篇学习笔记将带你探索JavaScript的核心概念,包括变量、数据类型、控制流、函数、对象和类等,这些都是构建复杂应用程序的基础。 首先,我们要了解JavaScript的基础语法。在JavaScript中,变量是存储数据的容器,...
本篇笔记主要基于阮一峰的博客,探讨了两种常见的JS模块规范:CommonJS和AMD,以及如何使用require.js进行模块管理。 1. **CommonJS**:这是Node.js服务器端编程广泛采用的模块化标准。在CommonJS中,`require()`...
这篇"JavaScript入门新手学习笔记"提供了全面的学习资源,适合初学者系统性地掌握这一技术。 笔记可能包含了以下关键知识点: 1. **基础语法**:JS的基础包括变量(var、let、const)、数据类型(如字符串、数字、...
这篇“JavaScript学习笔记之总结与回顾”涵盖了从基础到进阶的广泛内容,总计2.8万字,旨在为学习者提供一个全面的理解JavaScript的平台。 在学习JavaScript时,首先会接触的是基本的语法结构,包括常量、变量和...
JavaScript学习笔记主要涵盖...通过阅读和理解这篇"JavaScript学习笔记",你可以逐步提升JavaScript技能,从而更好地开发网页和应用程序。记得实践是检验真理的唯一标准,多写代码,多解决问题,才能真正掌握这门语言。
本文是一篇关于Redis全套学习笔记的文章,主要介绍了Redis的基础知识、数据结构、持久化、集群、高可用、性能优化等方面的内容。通过本文的学习,读者可以全面掌握Redis的使用和应用,提高自己的技术水平和实践能力...
这篇学习笔记主要介绍了 Yui_ext 的基础知识,适合对 JavaScript 和 HTML DOM 有一定了解的初学者。 首先,了解 Ext 库的基本概念。Ext 提供了一个强大的框架,用于创建具有丰富用户体验的网页应用,其核心是 ...
《蓝杰JavaScript学习笔记》是一份综合性的JavaScript学习资料,主要涵盖了JavaScript在网页动态操作、DOM操作以及事件处理等方面的基础知识。这篇笔记通过多个实例文件,如`dynamicCreateTable.htm`、`...
在"Vue学习笔记之分享篇.zip"这个压缩包中,我们可以期待获取到关于Vue.js的学习资料,包括文档、安装程序以及可能的代码示例。 首先,`Vue.docx`可能是作者整理的Vue学习笔记,里面可能包含了Vue的基础概念、核心...
根据pink老师的课程做的学习笔记 学习JavaScript看这篇就够了
这篇学习笔记涵盖了JavaScript的基础知识,以及与前端开发相关的其他重要概念。 JavaScript是ECMAScript的一个实现,是一种解释型的、基于原型的、动态类型的编程语言。它的发展史与浏览器密切相关,从最初的...