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 ...
- Spring框架学习(9)AOP技术理解与使用
内容源自:AOP技术理解与使用 一.什么是AOP? aop技术是面向切面编程思想,作为OOP(面向对象编程)的延续思想添加到企业开发中,用于弥补OOP开发过程中的缺陷而提出的编程思想. AOP底层也是 ...
- ElasticSearch位置搜索
ElasticSearch位置搜索 学习了:https://blog.csdn.net/bingduanlbd/article/details/52253542 学习了:https://blog.cs ...
- activemq持久化配置,设置为主从模式(带复制的主从模式,应用mysql数据库)
配置文件如下<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor l ...
- 求函数 y=x^2-2x-3/2x^2+2x+1 的极值
解:展开函数式得到2yx2+2xy+y=x2-2x-3 继而得到(2y-1)x2+(2y+2)x+(y+3)=0 将上式看作x的二次方程,y组成了方程的系数. 只有Δ>=0,x才有实值. Δ=( ...
- Rails零散知识
1. 邮箱验证VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]+\z/i validates :email, pres ...
- ZK框架笔记5、事件
事件是org.zkoss.zk.ui.event.Event类,它通知应用程序发生了什么事情.每一种类型的事件都由一个特定的类来表示. 要响应一个事件,应用程序必须为事 ...
- odoo8.0下selection_add的使用
在odoo中有selection类型的字段,用于限定字段的值在某些范围之内,在view上面显示此字段时,会显示一个下拉的列表. 如果是自己新定义的字段,这个列表的内容可以自己定义,但如果是继承自某个对 ...
- 关于天津中软国际ETC培训中心的见与闻
半个月的时间转眼即逝,在中软国际天津ETC的实训的两个星期就这样过去了,在中软国际天津站的这段时间也收获了非常多.明确了非常多,了解了很多关于社会就业的知识以及关于软件培训的一些事情.尽管我的了解可能 ...
- Struts2拦截器浅析
一.拦截器简介: Struts2大多数核心功能是通过拦截器实现的,每个拦截器完成某项功能. 拦截器方法在Action执行之前或者之后执行. 拦截器栈: 从结构上看,拦截器栈相当于多个拦截器的组合. 在 ...