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 ...
随机推荐
- 解决 KendoUI TabStrip 高度 100% 问题
摘自: http://www.kendoui.com/forums/kendo-ui-web/tabstrip/forcing-tabstrip-to-take-up-100-of-it-s-pare ...
- in_array() 和array_search的区别
在判断字符串是否在某个数组里面的时候,我们会经常用到in_array()和array_search这两个函数. 他们的用法都是在数组中搜索给定的值,但是不同的是, in_array()给定的值 val ...
- 浏览器兼容性问题解决方案之CSS,已在IE、FF、Chrome测试
当前主浏览器的核心是什么? 1) Trident:IE浏览器使用的内核,该内核程序在1997年的IE4中首次被采用,是微软在Mosaic代码的基础之上修改而来的,并沿用到目前的 IE7.Trident ...
- 有趣的Java之调皮的浮点数
**当你在写一个电商网站的时候,你可能会给你的商品标价1.99,10.9这样的价格来吸引顾客.我应该用浮点数float/double来储存它们,当我的顾客购买商品的时候,从他们的账户里扣费,使用整型是 ...
- JavaScript的String对象
1.创建String对象 Html标签的格式编排方法:可以将String对象的字符串内容输出成对应的html标签. 示例: var str = "JavaScript程序设计"; ...
- iPhone销售拉动 鸿海精密第一季度利润增长21%
据美国<华尔街日报>5月15日消息,苹果公司主要代工厂鸿海精密发布,第一季度利润增长21%.主要得益于iPhone手机销量强劲以及生产效率提升. 这家全球最大的电子产品代工商近一半的收入是 ...
- git 关联远程分支
问题解析: git本地新建一个分支后,必须要做远程分支关联.如果没有关联, git 会在下面的操作中提示你显示的添加关联.关联目的是如果在本地分支下操作: git pull, git push ,不需 ...
- RMQ 算法入门
1. 概述 RMQ(Range Minimum/Maximum Query).即区间最值查询,是指这样一个问题:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A ...
- windows下安装UNO,配置AEROO_REPORT (Openoffice4已经升级为Python2.7.5版)
来自:http://shine-it.net/index.php?topic=8019.msg22007 最近单位要上一个OE,但OE7一天一个新更新,不知何年到头. 闲着没事写一点心得,不敢称为教程 ...
- SQL中的重要语句
1.查询每个数据库有多少空间被浪费 如果你想知道在你数据库设计后,每页有多少空间浪费掉,你可 以通过下列动态管理视图(DMV)查询下缓冲池:sys.dm_os_buffer_descriptors 从 ...