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. 微信小程序开发初体验--教你开发小程序

    微信小程序 微信小程序面世以来受到的关注颇多,直到最近我才动手尝试进行了小程序的开发,总体上感觉还是不错的,有一点不适应的就是要摆脱Web APP开发对DOM的操作.在这里我就把我是如何利用API开发 ...

  2. 理解 OpenStack + Ceph (4):Ceph 的基础数据结构 [Pool, Image, Snapshot, Clone]

    本系列文章会深入研究 Ceph 以及 Ceph 和 OpenStack 的集成: (1)安装和部署 (2)Ceph RBD 接口和工具 (3)Ceph 物理和逻辑结构 (4)Ceph 的基础数据结构 ...

  3. BUCK-BOOST反激变压器设计

    Buck-Boost电路中,最低电压为其最恶劣情况 以下图为例: 注:1.Np为初级绕组匝数,Ns为次级绕组匝数: 2.Vmos为MOS最大耐压值,1为整流管压降,Vl为漏,Vl=100V,Vmos选 ...

  4. RSA Study

    These days I study the RSA Algorithm. It is a little complex, but not very. Also, my study has not f ...

  5. webstorm的中文教程和技巧分享

    webstorm是一款前端javascript开发编辑的神器,此文介绍webstorm的中文教程和技巧分享.webstorm8.0.3中文汉化版下载:百度网盘下载:http://pan.baidu.c ...

  6. EditText限制输入字符类型的几种方式

    最近的项目上需要限制EditText输入字符的类型,就把可以实现这个功能的方法整理了一下: 1.第一种方式是通过EditText的inputType来实现,可以通过xml或者Java文件来设置.假如我 ...

  7. Android系统自带APP分析——短信app

    Android操作系统本身就是一个巨大的开源软件仓库,熟悉它既可以了解到Android系统的设计框架,也可以获得高效的应用程序编写方式.本文所分析的源码来自于Google官方的AOSP源码4.0.1_ ...

  8. js模拟高级语言的重载

    js以递归的方式模拟高级语言的重载,我以添加元素节点为例子: //现有的子元素之前插入一个新的子元素 var before = function(elem,newElement,targetEleme ...

  9. http协议(三)几种数据传输方式

    说说http协议的一些特点: 1)无状态 http协议是一种自身不对请求和响应之间的通信状态进行保存的协议,即无状态协议. 这种设置的好处是:更快的处理更多的请求事务,确保协议的可伸缩性 不过随着we ...

  10. Mysql优化系列(1)--Innodb引擎下mysql自身配置优化

    1.简单介绍InnoDB给MySQL提供了具有提交,回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎.InnoDB锁定在行级并且也在SELECT语句提供一个Oracle风格一致的非锁定读.这些特色 ...