object

How do “Object()” and “new Object()” differ in JavaScript?

荒凉一梦 提交于 2019-12-31 11:48:19
问题 In JavaScript, what's the difference between var x = Object(); and var x = new Object(); ? 回答1: This is pulled directly from the ECMAScript specification: 15.2.1 The Object Constructor Called as a Function When Object is called as a function rather than as a constructor, it performs a type conversion. 15.2.1.1 Object ( [ value ] ) When the Object function is called with no arguments or with one argument value, the following steps are taken: If value is null, undefined or not supplied, create

对象防篡改

*爱你&永不变心* 提交于 2019-12-31 11:11:37
ES5的放篡改方法: Object.preventExtensions(); //限制扩展后 不能添加 新属性方法 Object.isExtensible(obj); //布尔值 Object.seal(); //将对象密封,在“preventExtensions”的基础上吧[configarable]设置为false, 不能删除 已有的属性方法,但是可以修改属性值 Object.IsSealed(obj); //布尔值 Object.freeze(obj); //在“seal”的基础上将数据属性的[writable]设置为false,变成只读,不过访问器属性[[set]]可改写。 Object.IsFrozen(obj); //布尔值 防篡改的对象执行错误操作后(比如添加新属性/方法),在非严格模式下会静候失败或忽略,在严格模式下会报错。 这些方法主要用在写插件/模块上,防止被其他程序修改。 在ES6中,有个Reflect对象,提供了和 proxy handler methods 同名的各种方法,这些方法中有不少名字和Object所提供的方法一致,效用也相同。阮一峰先生在他的《ES6入门》提到,其设计目的是将Object中明显属于语言层面的方法放到Reflect上,未来的这类新方法只部署到Reflect上。MDN上提到,Reflect不是一个Function对象,不是构造器

JavaScript中的防篡改对象

孤街浪徒 提交于 2019-12-31 11:11:02
由于JavaScript共享的特性,任何对象都可以被放在同一环境下运行的代码修改。 例如: var person = {name:"caibin'} person.age = 21; 即使第一行定义了完整的person对象,那么第二行代码仍然可以对其添加属性,删除属性等。 我们有三个方法可以防止你做出这些行为。 一、不可扩展对象: 先来看person本身的扩展性: Object.isExtensible(person); // true 接下来执行: Object.preventExtensions(person); Object.isExtensible(person) ;// false person.age = 29; console.log(person.age) ;//undefined 默认情况下,person.age = 29会静默失败,严格模式下,会报错。 然后,我们可以修改之前已经存在的person的属性。 例如: person.name = "cb"; console.log(person.name); // cb 甚至可以删除: delete person.name; // true; console.log(person) ; // {} 小结:当对象被设置为不可扩展之后,不可以增加属性,但是可以修改,删除原来存在的属性。 二、密封的对象: 密封对象意味着

JavaScript防篡改对象

狂风中的少年 提交于 2019-12-31 11:10:25
不可扩展对象 默认情况下,所有对象都是可扩展的,使用Object.preventExtensions()方法可以改变这一行为。 var person = { name: "Hiram" }; Object.preventExtensions(person); person.age = 29; alert(person.age); //undefined 虽然不能改对象添加新成员,但仍然可以修改和删除已有的成员,使用Object.isExtensible()方法还可以确定对象是否可以扩展。 密封的对象 ECMAScript 5 为对象定义的第二个保护级别是密封对象(sealed object)。要密封对象,可以使用Object.seal()方法。密封对象不可扩展,而且已有成员的[[Configurable]]特性将被设置为false,意味着不能删除属性和方法。 var person = { name: "Hiram" }; Object.seal(person); person.age = 29; alert(person.age); //undefined delete person.name; alert(person.name); //"Hiram" 使用Object.isSealed()方法可以确定对象是否被密封了。 冻结的对象 最严格的防篡改级别是冻结对象(frozen

ECMAScript5 Object的新属性方法

若如初见. 提交于 2019-12-31 11:01:48
ECMAScript5 Object的新属性方法 虽然说现在并不是所有的浏览器都已经支持ECMAScript5的新特性,但相比于ECMAScript4而言ECMAScript5被广大浏览器厂商广泛接受,目前主流的浏览器中只有低版本的IE不支持,其它都或多或少的支持了ECMAScript5的新特性,其中重中之重自然是一切对象的基类型——Object Object.create(prototype[,descriptors]) 这个方法用于创建一个对象,并把其prototype属性赋值为第一个参数,同时可以设置多个descriptors,关于decriptor下一个方法就会介绍这里先不说。只需要这样就可以创建一个原型链干净对象了 var o = Object.create({ "say": function () { alert(this.name); }, "name":"Byron" }); Object.defineProperty(O,Prop,descriptor) / Object.defineProperties(O,descriptors) 想明白这两个函数必须明白descriptor是什么,在之前的JavaScript中对象字段是对象属性,是一个键值对,而在ECMAScript5中引入property,property有几个特征 1. value:值

ECMAScript5 Object的新属性方法

孤街醉人 提交于 2019-12-31 11:01:17
虽然说现在并不是所有的浏览器都已经支持ECMAScript5的新特性,但相比于ECMAScript4而言ECMAScript5被广大浏览器厂商广泛接受,目前主流的浏览器中只有低版本的IE不支持,其它都或多或少的支持了ECMAScript5的新特性,其中重中之重自然是一切对象的基类型——Object Object.create(prototype[,descriptors]) 这个方法用于创建一个对象,并把其prototype属性赋值为第一个参数,同时可以设置多个descriptors,关于decriptor下一个方法就会介绍这里先不说。只需要这样就可以创建一个原型链干净对象了 var o = Object.create({ "say": function () { alert(this.name); }, "name":"Byron" }); Object.defineProperty(O,Prop,descriptor) / Object.defineProperties(O,descriptors) 想明白这两个函数必须明白descriptor是什么,在之前的JavaScript中对象字段是对象属性,是一个键值对,而在ECMAScript5中引入property,property有几个特征 1. value:值,默认是undefined 2. writable

ECMAScript5 Object的新属性方法

寵の児 提交于 2019-12-31 11:00:41
虽然说现在并不是所有的浏览器都已经支持ECMAScript5的新特性,但相比于ECMAScript4而言ECMAScript5被广大浏览器厂商广泛接受,目前主流的浏览器中只有低版本的IE不支持,其它都或多或少的支持了ECMAScript5的新特性,其中重中之重自然是一切对象的基类型——Object Object.create(prototype[,descriptors]) 这个方法用于创建一个对象,并把其prototype属性赋值为第一个参数,同时可以设置多个descriptors,关于decriptor下一个方法就会介绍这里先不说。只需要这样就可以创建一个原型链干净对象了 var o = Object.create({ "say": function () { alert(this.name); }, "name":"Byron" }); Object.defineProperty(O,Prop,descriptor) / Object.defineProperties(O,descriptors) 想明白这两个函数必须明白descriptor是什么,在之前的JavaScript中对象字段是对象属性,是一个键值对,而在ECMAScript5中引入property,property有几个特征 1. value:值,默认是undefined 2. writable

QObject

こ雲淡風輕ζ 提交于 2019-12-31 10:48:28
QObject类中方法    setObjectName("object name")      设置一个名称,一般这个名称是唯一的,当做对象的ID来使用   objectName()     获取对象的名称   setProperty("property_name","property_value")     动态添加一个属性与值   property("property_name")     获取一个属性的值   dynamicPropertyNames()     获取一个对象中所有通过setProperty()设置的属性名称 使用示例 from PyQt5.Qt import * obj = QObject() obj.setObjectName("notice") #给一个Qt对象设置名字为notice print(obj.objectName()) #输出:notice obj.setProperty("property01","value01")#给Qt对象动态两个属性和其对应值 obj.setProperty("property02","value02") print(obj.property("property02")) #输出:value02 print(obj.dynamicPropertyNames()) #输出:[PyQt5.QtCore

Problems with JavaScript “for in” loop

Deadly 提交于 2019-12-31 07:44:06
问题 I have an array of objects which will be the basis for a certain menu in my website. It will be build using JavaScript: [ {"menuName":"Contact Info","sectionName":"contacts"}, {"menuName":"Facilities","sectionName":"facilities"}, {"menuName":"Locations","sectionName":"locations"}, {"menuName":"Packages","sectionName":"packages"}, {"menuName":"Policies","sectionName":"policies"}, {"menuName":"Reviews","sectionName":"reviews"}, {"menuName":"Rooms","sectionName":"rooms"} ] So I decided to use

Javascript function with prototype within parent function prototype

Deadly 提交于 2019-12-31 06:58:29
问题 Is this even possible? function foo() { // do stuff } foo.prototype = { // stuff... bar: function() { // do some things with this, where this refers to foo }, bar.prototype: { // set some definitions for bar to work with. // Where does "this" go and what does it refer to? } } 回答1: No. You'd need to use function bar() {...} bar.prototype = {...}; function foo() {...} foo.prototype.bar = bar; Although this won't work. There is no reason to put the bar constructor on foo s prototype, because