关于 js 对象

js中所有事物都是对象:字符串 数组...()万物皆对象

js 有一些内建对象 String Date Array等

属性类型
  [[Configurable]] 表示能否通过 delete 删除属性从而从新定义属性,能否修改属性的特性
  [[Enumerable]] 表示能否通过 for-in 循环返回属性
  [[Writable]] 表示能否修改属性的值。
  [[Value]] 包含这个属性的数据值,默认为 undefined

不建议操作以上属性。

创建对象:

方式一:工厂模式

function createPerson(name, age, job){
    var o = new Object();  //创建对象 (原料)
    o.name = name; //加工
    o.age = age;
    o.job = job;
    o.sayName = function(){
        alert(this.name);
    };
    return o;   //返回对象(出厂)
}
var person1 = createPerson("N", 29, "Engineer");
var person2 = createPerson("G", 27, "Doctor");

缺点:无法显示出 person1与 createPerson的依赖关系 (person1.constructor 等于 Object 构造函数)

方式二:构造函数模式

function Person(name, age, job){  //构造函数始终都应该以一个大写字母开头,非构造函数则以小写字母开头
  this.name = name;
  this.age = age;
  this.job = job;
  this.sayName = function(){
      alert(this.name);
  };
}
var person1 = new Person("N", 29, "Engineer");
var person2 = new Person("G", 27, "Doctor");

以这种方式调用构造函数实际上会经历4个步骤
  1.创建一个新对象
  2.将构造函数的作用域赋给新对象 (实际上就是 构造函数中的 this );
  3.执行构造函数中的代码(添加属性)
    4.返回新对象

通过构造函数模式创建的对象都有一个 constructor 属性 该属性指向 Person

alert(person1.constructor == Person); //true

方式三:原型模式

  使用构造函数的prototype 属性来指定那些应该共享的属性和方法。 组合使用构造函数模式和原型模式时,使用构造函数定义实例属性,而使用原型定义共享的属性和方法。

每一个 通过构造函数 new 出来的实例 都包含一个内部属性,该属性仅指向 Person.prototype

function Person(){} //构造函数

Person.prototype.name = ‘xx‘;
Person.prototype.age = 23;

var p1 = new Person();
p1.name = ‘pp‘;
console.log(p1.name);  // pp  来自实例
delete p1.name;   // deleate  不能删除原型链上的属性  删除的是 实例上的属性
console.log(p1.name)  // xx   来自原型

  访问属性或方法时 总是先查找当前实例 当当前实例找不到所要的方法或者属性后再向上查找原型链上的方法与属性。所以,第一处打印会来自实例的name 属性 当删除改属性后(deleate不能删除原型上的属性),在当前实例找不到name属性 向上查找原型链上的name 属性,所以第二处打印的是 xx。

注意:in操作符会在通过对象能够访问给定属性时返回 true 无论该属性存在于实例中还是原型中(即只要实例或者原型中有要访问的属性即返回true)

解决办法:同时使用 hasOwnProperty() 跟 in 操作符,就可以确定该属性到底是存在于对象还是存在于原型

function hasPrototypeProperty(object,name){  //实例属性返回 false  原型属性 返回 true
  return !object.hasOwnProperty(name) && (name in object);
}

要取得对象上的所有可枚举的实例属性,可以使用 ES5的 Object.keys() 该方法接收一个对象作为参数

时间: 2024-12-27 23:39:29

关于 js 对象的相关文章

JQuery之JQuery的版本 JQuery入门 属性获取 JQuery就绪函数 JS文档就绪函数和JQuery文档就绪函数的区别 JS对象和JQuery对象的区别 关于$的使用 多个JS库的冲突解决方案

JQuery的版本 JQuery入门 属性获取 JQuery就绪函数 JS文档就绪函数和JQuery文档就绪函数的区别 JS对象和JQuery对象的区别 关于$的使用 多个JS库的冲突解决方案 JQuery的版本 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>jQuery的版本</title> <

DOM对象和js对象以及jQuery对象的区别

一.DOM对象 文档对象模型简称DOM,是W3C组织推荐的处理可扩展置标语言的标准编程接口. DOM实际上是以面向对象方式描述的文档模型.DOM定义了表示和修改文档所需的对象.这些对象的行为和属性以及这些对象之间的关系. 通过DOM,可以访问所有的 HTML 元素,连同它们所包含的文本和属性.可以对其中的内容进行修改和删除,同时也可以创建新的元素. HTML DOM 独立于平台和编程语言.它可被任何编程语言诸如 Java.JavaScript 和 VBScript 使用. DOM对象,即是我们用

js对象浅拷贝和深拷贝详解

js对象浅拷贝和深拷贝详解 作者:i10630226 字体:[增加 减小] 类型:转载 时间:2016-09-05我要评论 这篇文章主要为大家详细介绍了JavaScript对象的浅拷贝和深拷贝代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文为大家分享了JavaScript对象的浅拷贝和深拷贝代码,供大家参考,具体内容如下 1.浅拷贝 拷贝就是把父对像的属性,全部拷贝给子对象. 下面这个函数,就是在做拷贝: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 var

多个jsp页面共享一个js对象的超级方法

一个jsp页面为A.jsp,在A.jsp中点击一个按钮打开另一个B.jsp页面.思路如下: 在A.jsp打开B.jsp的事件中,写入如下代码: 1 2 window.top['_CACHE'] = chatFrdList; window.top['_CACHE'][frdUserId] = frdUserId; 其中,chatFrdList定义为var chatFrdList = new Object(); frdUserId为一个用户的id. 那么,在B.jsp的一个事件中,就可以执行下面的操

js对象字面量属性间相互访问的问题 和 这个问题与执行环境的关系

对象字面量属性间无法相互访问的问题: 我曾经在定义一个对象时, 并出于复用性的考虑试图复用某些属性: // test 1 var person = { firstName : "Bill", lastName : "Gates", fullName : firstName + " " + lastName // 这里报错 } alert(person.firstName); alert(person.lastName); alert(person

创建Vue.js对象:我的第一个Vue.js输出信息

<!DOCTYPE html><html><head><meta charset=”utf-8″><title>Vue第一条信息</title><script src=”js/vue.js”></script></head><body><div id=”app”><p>{{ message }}</p></div> <script&g

js 对象与过程

仔细数数自己学js已有有一个多月了,然而自己看了很多视频,最终还是写不出什么.然后开始看书写小案例,感觉这样学,更能巩固和学习新知识,觉得此方法还不错,希望对新人有帮助.书上定义js是一种面向对象的动态脚本语言,它具有面向对象语言所特有的各种特性如封装,继承,多态等.(这里几个特性就已经够新手折腾了,反正我在此停留了许久),今天又接触到了js的对象,我用自己的语言说,js对象 是由数据对象(布尔,数值,字符串,等等)和函数对象组成. 今天又接触到了面向对象与面向过程.然后百度一下,有一句不雅的话

js对象的学习笔记(仅供参考)

一.面向对象语言的基本特征: 抽象.封装.继承.多态 封装:将抽象的数据和对数据的操作封装在一起,数据被保护在内部,程序的其他部分只有通过被授权的操作(成员方法),才能对数据进行操作 继承:由一个或多个类得来类的类的属性和方法的能力,一个类可以继承(extends)父类中的(public/protect)属性和(public/protect)方法,继承可以解决代码复用问题 多态:编写能以多种方法运行的函数或方法的能力 JS对象类型:本地对象.宿主对象(浏览器对象).内置对象 本地对象:独立于宿主

JS对象和类

JS对象类别 内置对象 如Array Date Function 宿主对象 比如浏览器中的window 自定义对象 用户在代码中创建的 对象的构成 属性 按继承区分 自有属性 继承属性 对象原型中定义的属性 按类别分 数据属性 存取器属性 var o = { get name() {}, set name(value) {}, } 三个对象特性 对象原型 prototype 对象的类 class 对象的拓展标记 属性特性 数据属性特性 value,writable,enumerable,conf

js对象和jq对象互相转换

1.DOM 对象转成 jQuery 对象 var v = document.getElementById("v"); //DOM对象 var $v = $(v); //jQuery 对象 即:把js对象括号 然后前面加上$符号. 2.jQuery 对象转成 DOM 对象 var $v = $("#v"); //jQuery 对象 var v = $v.get(0); //DOM对象 ( $v.get()[0] 也可以 ) alert(v.checked); //检测