在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属性详解的更多相关文章

  1. javascript 节点属性详解

    javascript 节点属性详解 根据 DOM,html 文档中的每个成分都是一个节点 DOM 是这样规定的:整个文档是一个文档节点每个 html 标签是一个元素节点包含在于 html 元素中的文本 ...

  2. Javascript中prototype属性详解 (存)

    Javascript中prototype属性详解   在典型的面向对象的语言中,如java,都存在类(class)的概念,类就是对象的模板,对象就是类的实例.但是在Javascript语言体系中,是不 ...

  3. JavaScript对象的property属性详解

    JavaScript对象的property属性详解:https://www.jb51.net/article/48594.htm JS原型与原型链终极详解_proto_.prototype及const ...

  4. JavaScript事件详解-jQuery的事件实现(三)

    正文 本文所涉及到的jQuery版本是3.1.1,可以在压缩包中找到event模块.该篇算是阅读笔记,jQuery代码太长.... Dean Edward的addEvent.js 相对于zepto的e ...

  5. JavaScript事件详解-Zepto的事件实现(二)【新增fastclick阅读笔记】

    正文 作者打字速度实在不咋地,源码部分就用图片代替了,都是截图,本文讲解的Zepto版本是1.2.0,在该版本中的event模块与1.1.6基本一致.此文的fastclick理解上在看过博客园各个大神 ...

  6. JavaScript正则表达式详解(一)正则表达式入门

    JavaScript正则表达式是很多JavaScript开发人员比较头疼的事情,也很多人不愿意学习,只是必要的时候上网查一下就可以啦~本文中详细的把JavaScript正则表达式的用法进行了列表,希望 ...

  7. JavaScript正则表达式详解(二)JavaScript中正则表达式函数详解

    二.JavaScript中正则表达式函数详解(exec, test, match, replace, search, split) 1.使用正则表达式的方法去匹配查找字符串 1.1. exec方法详解 ...

  8. OutputCache属性详解(三)— VaryByHeader,VaryByCustom

    目录 OutputCache概念学习 OutputCache属性详解(一) OutputCache属性详解(二) OutputCache属性详解(三) OutputCache属性详解(四)— SqlD ...

  9. OutputCache属性详解(四)— SqlDependency

    目录 OutputCache概念学习 OutputCache属性详解(一) OutputCache属性详解(二) OutputCache属性详解(三) OutputCache属性详解(四)— SqlD ...

随机推荐

  1. HDU5312 Sequence

    题意:t组数据,每组数据给个m.问m最少能由几项形如3*n*(n-1)+1的数表示 eg 7=1(n=1)+1(n=1)+1(n=1)+1(n=1)+1(n=1)+1(n=1)+1(n=1);     ...

  2. js 在表单提交前进行操作

    最近在写页面的时候,需要手动写一些在表单进行提交前的验证操作,正好看到了2种阻止表单提交的方法,可以进行一些逻辑处理 方法一:使用return false 原生js写法: <form id=&q ...

  3. 【笔记】js原生方法 在元素外部或内部实现添加元素功能(类似jq 的 insert 和 append)

    介绍的这个方法是:insetAdjacentHTML() 方法 此方法接收两个参数: 第一个参数必为下列值: beforebegin:在调用的元素外部的前面添加一个目标元素 afterend:在调用元 ...

  4. [服务器安全]升级OpenSSH,OpenSSL,vsftp,关闭NTP服务

    公司的旧版直播服务器使用的是CentOS 6.7,很多软件包都是几年前的了.最近很多安全相关的新闻充斥着IT圈,先是Intel芯片有重大安全漏洞,后面MacOS爆安全漏洞.所以,对于安全问题还真不能小 ...

  5. iOS Mapkit 定位REGcode地理位置偏移

    在iOS上,使用系统Mapkit定位,获取到的坐标会有偏移: 今有需求,用系统Mapkit定位,并Regcode出实际地理位置,修正偏移: 解决方案: 使用MapView的代理 - (void)map ...

  6. 算法笔记_092:蓝桥杯练习 c++_ch04_02_修正版(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 [题目描述] 实现一个时间类Time.将小时,分钟和秒存储为int型成员变量.要求该类中包含一个构造函数,访问用的函数,一个推进当前时间的函数adv ...

  7. chromedriver中的浏览器选项

    There are lots of command lines which can be used with the Google Chrome browser. Some change behavi ...

  8. Visual studio之C#的一些常见问题

    背景 要写一个APP,APP通过串口控制下位机,在此记录C#的一些常用控件的使用办法. 正文 单击button控件,执行对应操作. 选择要操作的button控件,在属性栏内点击类似闪电标志一样的事件, ...

  9. XML-RPC.NET

    XML-RPC.NET 是一个 .NET 的客户端服务器的基于 XML-RPC 远程过程调用的框架. 示例代码: [XmlRpcUrl("http://betty.userland.com/ ...

  10. ssh2 三大框架整合

    提示:eclipse环境.工程环境.tomcat环境的jdk保持一致 1.新建一个工程,把工程的编码为utf-8 2.把jsp的编码形式改成utf-8 3.把jar包放入到lib下           ...