1. 属性类型

  数据属性

  ①Configurable 表示能否通过delete删除属性,默认值true

  ②Enumerable 表示能否通过for-in循环访问属性,默认值true

  ③Writable 表示能否修改属性的值,默认值true

  ④Value 包含这个属性的默认值,默认值Undefined.

                        var person = {};
Object.defineProperty(person, 'name', {
configurable: false,
value: 'Nicholas'
}
);
alert(person.name);
delete person.name;
alert(person.name);

访问器属性

  ①set 在写入属性时调用的函数

  ②get 在读取属性时调用的函数

                         var book = {
_year: 2004,
edition: 1
}; Object.defineProperty(book,'year',{
get: function(){
return this._year;
},
set: function(newValue){
if(newValue > 2004){
this._year = newValue;
this.edition += newValue - 2004;
}
}
});
book.year = 2005;
alert(book.edition); //2

2. 创建对象

  ①构造函数当做函数用

function Person(name,age,job){
this.name = name;
this.age = age;
this.job = job;
this.sayName = function(){
alert(this.name);
}
} // 构造函数
var person = new Person('Nicholas', 29, 'software Engineer');
person.sayName(); // 作为普通函数
Person('Greg', 27, 'Dector'); //添加到了window(在全局作用域中调用一个函数,this对象总是指向浏览器中的window对象)
window.sayName(); // 作为另一个对象作用域调用
var o = new Object();
Person.call(o,'Kristen', 25, 'Nurse'); //可以使用call()或者apply() 在某个特殊对象的作用域中调用Person()函数,这里在对象o的作用域调用的,因此调用后o就拥有了所有的属性和sayName()方法。
o.sayName();

  ②把函数变成全局变量,添加到对象里面

function sayName(){
alert(this.name);
};
function Person(name,age,job){
this.name = name;
this.age = age;
this.job = job;
this.sayName = sayName; //直接指向全局的sayName方法
} var person1 = new Person('Nicholas', 29, 'software');
person1.sayName();

3. 原型模式

  ①使用

  

function Person(){

            }
Person.prototype.name = 'Nicholas';
Person.prototype.age = 29;
Person.prototype.job = 'software';
Person.prototype.sayName = function(){
alert(this.name);
} var person1 = new Person();
person1.sayName();

  ②理解 个人理解:每个对家都有一个构造函数,这个原型对象的属性就有这个构造函数,只是这个原型对象还可以自己添加属性

    这里要学习一个in操作符,判断通过对象能够访问给定属性时返回true,就是判断该属性是不是该对象的属性。alert('name' in Person);

  

③组合构造函数模式和原始模式 (使用最常见的模式)

//组合使用构造函数模式和原型模式
function Person(name,age,job){
this.name = name;
this.age = age;
this.job = job;
this.friends = ['Shelby','Court'];
} Person.prototype = { //重新定义原型对象
constructor: Person,//构造函数
sayName: function(){
alert(this.name);
}
}

js对象学习的更多相关文章

  1. js面向对象学习 - 对象概念及创建对象

    原文地址:js面向对象学习笔记 一.对象概念 对象是什么?对象是“无序属性的集合,其属性可以包括基本值,对象或者函数”.也就是一组名值对的无序集合. 对象的特性(不可直接访问),也就是属性包含两种,数 ...

  2. js的常用方法和对象学习

    js的常用方法和对象学习String对象:操作字符的. 使用:字符串.函数名. 大小写转换: toUpperCase() 转换大写 toLowerCase() 转换小写 function testSt ...

  3. JS基础学习——对象

    JS基础学习--对象 什么是对象 对象object是JS的一种基本数据类型,除此之外还包括的基本数据类型有string.number.boolean.null.undefined.与其他数据类型不同的 ...

  4. Jquery学习笔记(1)--JQuery原理,与JS对象互换,核心函数

    js对象转jQuery对象,$('num'), jQuery对象转js对象,$('num')[0],或$('num').get(0). 1.点击换行,each(),html(),attr(),每个h1 ...

  5. JQuery学习:jquery对象和js对象区别和转换

    JQuery对象与JS对象区别与转换 1.JQuery对象在操作时,更加方便 2.JQuery对象和js对象方法不通用 3.两者相互转换 *  jq -- > js:jq对象[索引]  或者  ...

  6. js数组学习整理

    原文地址:js数组学习整理 常用的js数组操作方法及原理 1.声明数组的方式 var colors = new Array();//空的数组 var colors = new Array(3); // ...

  7. React.js深入学习详细解析

    今天,继续深入学习react.js. 目录: 一.JSX介绍 二.React组件生命周期详解 三.属性.状态的含义和用法 四.React中事件的用法 五.组件的协同使用 六.React中的双向绑定   ...

  8. js入门学习~ 运动应用小例

    要实现的效果如下: 鼠标移入各个小方块,实现对应的效果(变宽,变高,移入透明,移出恢复)~~ (且各运动相互之前不干扰)  主要是练习多个物体的运动框架~~ --------------------- ...

  9. js再学习笔记

    #js再学习笔记 ##基本 1.js严格区分大小写   2.js末尾的分号可加,也可不加   3.六种数据类型(使用typeof来检验数据的类型) `typeof` - undefined: `var ...

随机推荐

  1. [转]ASP.NET MVC IOC 之AutoFac攻略

    本文转自:http://www.cnblogs.com/WeiGe/p/3871451.html 一.为什么使用AutoFac? 之前介绍了Unity和Ninject两个IOC容器,但是发现园子里用A ...

  2. MVC、MVVM、MVP小结

    MVC MVC(Mode View Controller)是一种设计模式,它将应用划分为三个部分: 数据(模型).展现层(视图).用户交互(控制器). 一个事件发生的过程: ① 用户和应用产生交互 ② ...

  3. SonarLint(Sonar) 代码质量管理

    一.Sonar是什么? Sonar是一个用于代码质量管理的开源平台,用于管理源代码的质量 通过插件形式,可以支持包括java,C#,C/C++,PL/SQL,Cobol,JavaScrip,Groov ...

  4. POJ3621Sightseeing Cows[01分数规划 spfa(dfs)负环 ]

    Sightseeing Cows Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9703   Accepted: 3299 ...

  5. u3d_Shader_effects笔记2 自定义surfaceDiffuseLight

    1.前面的心情 今晚7点半睡着后,9点半左右被吵醒.醒来后非常失落,感觉人生到底在追求什么,我又在追求什么.昨晚梦到妈妈了.最近不时会想到爷爷的去世.人世的险恶,良心的缺失.不过一切总要向前看,至少我 ...

  6. Android http超时选项的测试

    Android通过HttpConnectionParams类为http参数设置提供了两个超时的设置选项,分别是setSoTimeout和setConnectionTimeout.初看一眼Android ...

  7. Nginx针对https站点的部署

    一.Nginx安装(略)安装的时候需要注意加上 --with-http_ssl_module,因为http_ssl_module不属于Nginx的基本模块.Nginx安装方法:# ./configur ...

  8. js数组操作

    用 js有很久了,但都没有深究过js的数组形式.偶尔用用也就是简单的string.split(char).这段时间做的一个项目,用到数组的地方很多, 自以为js高手的自己居然无从下手,一下狠心,我学! ...

  9. TelephonyManager类与PhoneStateListener

    public class TelephonyManager extends Object java.lang.Object      android.telephony.TelephonyManage ...

  10. python数字图像处理(18):高级形态学处理

    形态学处理,除了最基本的膨胀.腐蚀.开/闭运算.黑/白帽处理外,还有一些更高级的运用,如凸包,连通区域标记,删除小块区域等. 1.凸包 凸包是指一个凸多边形,这个凸多边形将图片中所有的白色像素点都包含 ...