javascript属性详解
在js中,没有公共属性和私有属性之分,只有全局变量(全局属性)和局部变量以及对象属性。但是,程序员可以通过一定的技巧来实现面向对象语言的功能。下面我们来介绍这几种属性(变量)
全局变量也叫全局属性
/* 1.通过var关键字声明。这种声明方式只能在全局作用域内,不能在函数块内部*/
var a = ''; /*2.直接给未声明的变量赋值,这种方式在任何情况都有效。不过,一般程序员都
应当极力避免这种情况。这种隐士的声明一个全局属性是很容易出错的*/
a = ''; /*3.通过window对象,这种方式可以在任何地方使用。如果需要定义一个全局属性,
我推荐使用这种。*/
window.a = 'wname' ; /*4.用this。前提是要保证this是指向window,不过这是一种在意外情况下才会发生
的。*/
function x(){ this.a ='aname';}
x(); /*总结:以上4种情况可以分为两大类。第一种和后面3种。第一类必须是在全局作用域类,
也是常用的方式;第二类可以不在全局作用域内声明,除了第3种,其他都应该避免使用。
还有,第一类是不可以使用delete来删除的,第二类则可以*/ var a = 'ss';
delete a // false window.a = '33'
delete a // true;
局部变量
/*在js中,只有函数才产生作用域。所以局部变量是在函数内部声明*/
function x(){
// a就是局部变量,从外部无法访问和修改。
var a = 'ws';
// 但是我们可以返回这个局部变量给外部使用。
return a;
} //很少情况下可以在外部修改局部变量。下面是一种 function foo(){
var o = {name: 'we'}; return function(){
return o;
}; } var f= foo(); var obj = f(); obj.name = 'ws'; f(); // {name: 'ws'}.即当闭包返回一个对象时,这个对象在外部是可能被修改的
对象属性
//1.先有对象后有属性
var o = {}
//可以通过以下方式给对象添加属性
o.name ='名称';
o['a'] = '另一个属性'
//属性的值也可以是函数
o.method = function(){}; //2.对象和属性同时存在
var o = {
'name': '名称',
'a': '另一个属性',
'method': function(){ }
}
//对于这种方式,属性最好加上引号 //3.通过函数new一个对象
function(name){
this.name = name
}
静态属性
/*在java中,通过【类名.属性】调用的方式,成为静态属性,也叫类属性。当然也可以
通过实例来调用,但是编译器会发出警告。在js中,我们把一个函数叫做一个类。这个函
数名第一个字母通常大写(大写非必须)*/
function Person(){ }
//静态属性
Person.a = 'ws';
//但是这个属性不可以通过实例调用
var p = new Person(); p.a; // undefined
私有属性
/*在js中,没有私有的概念。但是,可以通过闭包(局部变量)来实现*/
function Person (){
var name = '起个名吧';
this.getName = function(){
return name;
}
this.setName = function(newName){
name = newName;
}
} var p = new Person(); p.getName(); p.setName('张飞'); p.getName(); //张飞 /*像这样的,就只能通过getName、setName来读取写入属性name,可以对
name写入的值进行控制。但是,如果name是一个对象的话,外部代码就可以修
改它的值了*/
// 当属性方法返回的是一个对象
function Person(){
var info = {name: '未初始化'}
this.getInfo = function(){
return info;
}
} var p = new Person(); var pInfo = p.getInfo();// { name="未初始化"} pInfo.age = ; // 不小心修改了p对象的信息 p.getInfo(); // { name="未初始化", age=32}。对象被改变了。 /*针对这种情况,由于外部只是读操作,所以,我们可以返回一个副本。这样就不用
担心内部对象被修改了*/
function Person(){
var info = {name: '未初始化'}
this.getInfo = function(){
// 如果info有多个属性,可以用for in循环遍历
return {name: info.name};
}
}
在最新的js规范中,还可以通过get、set和defineProperty、defineProperties来定义对象的属性。这些是很强大的方法,下次再介绍。
javascript属性详解的更多相关文章
- javascript 节点属性详解
javascript 节点属性详解 根据 DOM,html 文档中的每个成分都是一个节点 DOM 是这样规定的:整个文档是一个文档节点每个 html 标签是一个元素节点包含在于 html 元素中的文本 ...
- Javascript中prototype属性详解 (存)
Javascript中prototype属性详解 在典型的面向对象的语言中,如java,都存在类(class)的概念,类就是对象的模板,对象就是类的实例.但是在Javascript语言体系中,是不 ...
- JavaScript对象的property属性详解
JavaScript对象的property属性详解:https://www.jb51.net/article/48594.htm JS原型与原型链终极详解_proto_.prototype及const ...
- JavaScript事件详解-jQuery的事件实现(三)
正文 本文所涉及到的jQuery版本是3.1.1,可以在压缩包中找到event模块.该篇算是阅读笔记,jQuery代码太长.... Dean Edward的addEvent.js 相对于zepto的e ...
- JavaScript事件详解-Zepto的事件实现(二)【新增fastclick阅读笔记】
正文 作者打字速度实在不咋地,源码部分就用图片代替了,都是截图,本文讲解的Zepto版本是1.2.0,在该版本中的event模块与1.1.6基本一致.此文的fastclick理解上在看过博客园各个大神 ...
- JavaScript正则表达式详解(一)正则表达式入门
JavaScript正则表达式是很多JavaScript开发人员比较头疼的事情,也很多人不愿意学习,只是必要的时候上网查一下就可以啦~本文中详细的把JavaScript正则表达式的用法进行了列表,希望 ...
- JavaScript正则表达式详解(二)JavaScript中正则表达式函数详解
二.JavaScript中正则表达式函数详解(exec, test, match, replace, search, split) 1.使用正则表达式的方法去匹配查找字符串 1.1. exec方法详解 ...
- OutputCache属性详解(三)— VaryByHeader,VaryByCustom
目录 OutputCache概念学习 OutputCache属性详解(一) OutputCache属性详解(二) OutputCache属性详解(三) OutputCache属性详解(四)— SqlD ...
- OutputCache属性详解(四)— SqlDependency
目录 OutputCache概念学习 OutputCache属性详解(一) OutputCache属性详解(二) OutputCache属性详解(三) OutputCache属性详解(四)— SqlD ...
随机推荐
- 使用CALayer实现图像镜面效果
在iOS中,可以使用QuartzCore.framework基于CALayer做一些图像效果,不清楚CALayer,请先看这篇. 在这里我们给图像做一个简单的镜面反射效果,要学习一些图像变化的知识,首 ...
- promise对象解决回调地狱
先放一张图片感受一下回调地狱 看起来是真的很让人头痛的东西 而现在我这里使用promise对象来解决回调地狱 采用链式的 then,可以指定一组按照次序调用的回调函数. 这时,前一个 then 里的一 ...
- 如何在asp.net mvc框架及django框架下面避免CSRF
CSRF 跨站伪造请求 不知CSRF为何物的,可以问下G哥. 在Asp.net MVC平台下,提供了Html.AntiForgeryToken() 方法,我们只需把其放在form的标签内,在浏览器端就 ...
- Java经典算法汇总之冒泡排序
冒泡排序基本思想:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒.即:每当两相邻的数比较后发现它们的排序与排序要求相反时 ...
- weblogic基本安装部署
1.3.1 安装WebLogic10(1) <JavaEE程序设计与应用开发>第1章JavaEE介绍和环境配置,本章首先介绍了JavaEE的基本理论,然后对本书将要使用的软件:JDK.服务 ...
- Android Studio 项目中集成百度地图SDK报Native method not found: com.baidu.platform.comjni.map.commonmemcache.JNICommonMemCache.Create:()I错误
Android Studio 项目中集成百度地图SDK报以下错误: java.lang.UnsatisfiedLinkError: Native method not found: com.baidu ...
- RTP 时间戳的处理
RTP 时间戳的处理 在RTP传输音频数据时,一般选定逻辑时间戳速率与采样速率相同, 但是在传输视频数据时,必须使时间戳速率大于每帧的一个滴答(这样才能使图像回放更为平滑--<用TCP/IP ...
- 【转】maven常见问题问答
转自:http://www.iteye.com/topic/973166 前言 Maven,发音是[`meivin],"专家"的意思.它是一个很好的项目管理工具,很早就进入了我的必 ...
- Java的IO操作,个人理解。
先看一段代码: import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import ...
- Win7 + vs2012 + cocos2d-x2.2 配置开发环境
昨天開始打算学习Cocos2d-x,首先肯定是要在自己的电脑上配置开发环境.昨天折腾了一天,以下将自己在当中遇到的问题与解决方法跟大家分享一下.大多数会遇到的问题,我都遇到了.... 1.安装 ...