1. 属性类型

  数据属性

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

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

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

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

  1. var person = {};
  2. Object.defineProperty(person, 'name', {
  3. configurable: false,
  4. value: 'Nicholas'
  5. }
  6. );
  7. alert(person.name);
  8. delete person.name;
  9. alert(person.name);

访问器属性

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

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

  1. var book = {
  2. _year: 2004,
  3. edition: 1
  4. };
  5.  
  6. Object.defineProperty(book,'year',{
  7. get: function(){
  8. return this._year;
  9. },
  10. set: function(newValue){
  11. if(newValue > 2004){
  12. this._year = newValue;
  13. this.edition += newValue - 2004;
  14. }
  15. }
  16. });
  17. book.year = 2005;
  18. alert(book.edition); //2

2. 创建对象

  ①构造函数当做函数用

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

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

  1. function sayName(){
  2. alert(this.name);
  3. };
  4. function Person(name,age,job){
  5. this.name = name;
  6. this.age = age;
  7. this.job = job;
  8. this.sayName = sayName; //直接指向全局的sayName方法
  9. }
  10.  
  11. var person1 = new Person('Nicholas', 29, 'software');
  12. person1.sayName();

3. 原型模式

  ①使用

  

  1. function Person(){
  2.  
  3. }
  4. Person.prototype.name = 'Nicholas';
  5. Person.prototype.age = 29;
  6. Person.prototype.job = 'software';
  7. Person.prototype.sayName = function(){
  8. alert(this.name);
  9. }
  10.  
  11. var person1 = new Person();
  12. person1.sayName();

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

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

  

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

  1. //组合使用构造函数模式和原型模式
  2. function Person(name,age,job){
  3. this.name = name;
  4. this.age = age;
  5. this.job = job;
  6. this.friends = ['Shelby','Court'];
  7. }
  8.  
  9. Person.prototype = { //重新定义原型对象
  10. constructor: Person,//构造函数
  11. sayName: function(){
  12. alert(this.name);
  13. }
  14. }

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. IIS中查看W3P.exe进程对应的应用程序池的方法

    对于IIS6可以运行 iisapp -a来显示应用程序池的性能列表. iisapp.vbs它是一个脚本程序,在安装2003时需要SP1才有 而IIS7可以直接用它的外壳命令 C:"Windo ...

  2. 【分享】4412开发板ubuntu 12.0.4播放音乐没有声音解决方法

    转自迅为论坛:http://bbs.topeetboard.com 准备工作 1.下载 vim 在命令行上输入 apt-get install vim 下载 vim 2.输入 vim /etc/hos ...

  3. java变量的初始化

    public class Init { private int age;//非静态初始化语句<3> private static String name; //静态初始化语句,先初始化静态 ...

  4. [No00003F]richtextbox实现拖放

    namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { Initialize ...

  5. java 关于多线程高并发方面

    转有关的文章链接: Java 高并发一:前言: http://www.jb51.net/article/92358.htm Java 高并发二:多线程基础详细介绍 http://www.jb51.ne ...

  6. 收集入侵Windows系统的证据

    随着网络的不断扩大,网络安全更加会成为人们的一个焦点,同时也成为是否能进一步投入到更深更广领域的一个基石.当然网络的安全也是一个动态的概念,世界上没有绝对安全的网络,只有相对安全的网络.相对安全环境的 ...

  7. html5游戏-包围盒检测算法

    矩形包围盒算法:检测2个矩形是否重叠,在这样情况下要判断2个矩形是否碰撞只需要比较两个矩形顶点的坐标即可.假设矩形A用(x1,y1)表示左上角,(x2,y2)表示右下角,矩形B用(x3,y3)表示左上 ...

  8. asp.net webapi支持跨域

    1.Install-Package Microsoft.AspNet.WebApi.Cors 2. using System.Web.Http; namespace WebService {     ...

  9. winform程序重启

    winform程序重启的方法: private void ReStart() { string processName = System.Diagnostics.Process.GetCurrentP ...

  10. Conherence Function

    来源: 部分来自wiki:https://en.wikipedia.org/wiki/Coherence_(signal_processing): 部分来自网络其它内容. The coherence  ...