javascript的对象和变量之间的区分
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript的对象和变量之间的区分相关的知识,希望对你有一定的参考价值。
参考技术A 0, javascript的变量有几种类型: number, string, boolean, function, object, 对象就是变量的一种类型.1,var request = createRequest();
我可以吧request当作一个变量,由createRequest方法来赋值;
这个说法有歧义, 不是由方法对变量赋值, 而是使用createRequest的返回值为变量赋值.
2, 我也可以把它当作一个object,于是request.xxx可以访问createRequest方法里面的xxx。
这个理解是错的, 从外部不能访问到方法内部定义的变量. 有一种特殊的情况:
function closure()
var a = 1;
return function()
return a++;
var fn = closure();
alert(fn()); //1;
alert(fn()); //2; 函数内部的变量被改变了
这个是JavaScript的闭包机制, 可以在方法外部修改方法的内部变更量. 类似于.Net的委托机制(Java的Callback); 并且这个内部变量的行为类似强制类型语言中的实例私有成员, 参考下面的代码:
//接上面的代码
var fn2 = closure();
alert(fn2()); //1, 创建了新的闭包
alert(fn()); //3, 原有闭包并未释放,
fn = null; //将对闭包内部变量的引用释放(将fn赋其它值也一样, fn = 1;), 则该闭包将会被gc回收
3, 对象, JavaScript对象一定是使用new关键字创建.
var a = ; //简化写法等价于 var a = new Object();
var b = []; //简化写法等价于 var a = new Array();
4, 实例, javascript不是面向对象的语言, 但是对象有默认的constructor属性, 引用创建对象的function(可以理解为某类型的实例). 但是, 因为javascript是弱类型动态语言, 可以动态修改对象的结构或使用其它类型的引用为变量赋值, 所以并不能在语言层面确保对象的封装, 参考下面的代码:
function class()
this.a = 1;
this.b = 'a';
function somethingElse()
return 1;
//创建3个class的实例
var a = new class();
var b = new class();
var c = new class();
//此时 a.constructor === b.constructor === c.constructor === class;
a.constructor = somethingElse; //覆盖constructor属性, 这样a就和class没有任何关联了, 虽然有一个instanceof二元操作符, 但是其实现是比较prototype, 本例中都没有指定prototype(默认), 所以instanceof是无效的, a instanceof class == true, a instanceof somethingElse == true, a instanceof Object == true,
b = new somethingElse(); //这时b就变成somethingElse的实例了(b.constructor === somethingElse), 但是somethingElse方法没有为实例添加任何成员, 所以b = ;
delete c.b; //删除对象的成员, c = a: 1, 这样虽然c.constructor === class(还是class的实例), 但是与其它由class创建的实例外观就不同了.
前端之JavaScript面向对象开发
1.语言基础
涉及语法、操作符、数据类型 以及内置功能,在此基础之上才可以构建复杂的解决方案
ECMAScript 的语法借鉴了 C 语言和其他类 C 语言
2.语法
2.1.区分大小写
ECMAScript 中一切都区分大小写,变量、函数名还是操作符,都区分大 小写
2.2.标志符(标识符,就是变量、函数、属性或函数参数的名称)
- 第一个字符必须是字母、下划线(_)或美元符号($)
- 剩下的其他字符可以是字母、下划线、美元符号或数字
-
_designbyly (ok) $designbyly (ok) designbyly (ok) 666Designbyly (x)
2.3.采用 C 语言风格的注释
单行注释:// 单行注释
块注释: /* 这是多行 注释 */
2.4.了严格模式(strict mode)
是一种不同的 JavaScript 解析和执行模型,要启用严格模式,在脚本开头加上这一行:
"use strict";
严格模式会影响 JavaScript 执行的很多方面,
2.5.语句以分号结尾。省略分号意味着由解析器确定语句在哪里结尾
let juzi1 = a + b // 没有分号也有效,但不推荐
let juzi2 = a - b; // 加分号有效,推荐
加分号也便于开发者通过删除空行来压缩代码
加分号也有助于在某些情况下提升性能
以上是关于javascript的对象和变量之间的区分的主要内容,如果未能解决你的问题,请参考以下文章