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.标志符标识符,就是变量、函数、属性或函数参数的名称

  1. 第一个字符必须是字母、下划线(_)或美元符号($)
  2. 剩下的其他字符可以是字母、下划线、美元符号或数字
  3. _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的对象和变量之间的区分的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript入门

JavaScript学习:JavaScript语法

JavaScript与Java有啥关系?

前端之JavaScript面向对象开发

前端之JavaScript面向对象开发

Java Script函数变量对象