⑴ 用JavaScript构建对象,只能通过set和unset方法存储键值对,并隐藏存储内容
你想要的是利用JS实现一个只能通过set和unset方式访问的数据存储对象吧,通过以下方式可以实现:
functionHashKey(){
vardata={};
this.set=function(key,value){//set方法
data[key]=value;
};
this.unset=function(key){//unset方法
deletedata[key];
};
this.get=function(key){//get方法
returndata[key]||"";
}
}
//测试代码
varhash_1=newHashKey();
hash_1.set("abc",1);
console.log(hash_1.get("abc"));
hash_1.unset("abc");
console.log(hash_1.get("abc"));
⑵ js中向对象中添加属性的两种方法
1.1 数据属性(`properties`),对象的普通属性将字符串名称映射到值。例如,下面对象obj有一个数据属性,名称为 prop,对应的值为 123:var obj = {prop: 123};可以用以下方式读取属性的值:console.log(obj.prop); // 123,console.log(obj["prop"]); // 123,当然也可以用以下方式来设置属性的值:obj.prop = "abc";obj["prop"] = "abc";
1.2 访问器属性,另外,可以通过函数处理获取和设置属性值。 这些函数称为访问器函数。 处理获取的函数称为getter。 处理设置的函数称为setter:var obj = {get prop () {return 'Getter';},set prop (value) {console.log('Setter: ' + value);}}访问 obj 属性:> obj.prop'Getter'> obj.prop = 123;Setter: 123。
1.3 内部属性一些属性只是用于规范,这些属于“内部”的属性,因为它们不能直接访问,但是它们确实影响对象的行为。内部属性有特殊的名称都写在两个方括号,如:内部属性[[Prototype]]指向对象的原型。它可以通过Object.getPrototypeOf()读取。它的值只能通过创建具有给定原型的新对象来设置,例如通过object.create()或__proto__ 。
内部属性[[Extensible]]决定是否可以向对象添加属性。可以通过Object.isExtensible() 方法判断一个对象是否是可扩展的(是否可以在它上面添加新的属性)。可以通过Object.preventExtensions()方法让一个对象变的不可扩展,也就是永远不能再添加新的属性。
属性特性(attribute),属性的所有状态,包括数据和元数据,都存储在特性(attribute)中。它们是属性具有的字段,就像对象具有属性一样。特性(attribute)键通常用双括号编写:
⑶ js 创建的对象存储在哪
保存在内存里,通过赋值给变量的形式,这样下次就可以通过变量名来访问: var data = { 'name': 'Sigma' };再保存持久一点,可以保存到cookie或者localStorage里: var data = { 'name': 'Sigma' };var dataStr = JSON.stringify( data );localS.
⑷ JS中怎么将多个对象添加到一个对象中
这个只能用集合来实现。
在JavaScript中,常用Array来存储和操作对象:
Array:
新建:var ary = new Array(); 或 var ary = [];
增加:ary.push(value);
删除:delete ary[n];
遍历:for ( var i=0 ; i < ary.length ; ++i ) ary[i];
⑸ 关于用JS存取cookie时存储一个对象变量的方法!请JS大神进来一看!
varstr="{"name":'小明',"type":'班长',"count":"2"}";
varobj=eval("("+str+")");
obj.name
obj.type
obj.count
⑹ js中函数到底怎么存储的
js从某种角度来说一切都是对象,对于你的问题我的解释如下:
function Car()是保存在Car这个变量里面的,Car的值是function(){...}。
我猜测js中的变量有两种,一种是定长变量,一种是变长变量。前者保存简单类型,后者是指向一个变长的内存区域。所以,对于声明的function,其本身是简单类型的,使用的方式为传值,但是new之后得到的实例是对象类型的,使用的方式是传址。
⑺ JS/Jquery 中怎么定义存储一个类似map中key-value形式的变量,并且怎样动态赋值key和value
varmap={
key1:'abc',
key2:'def'
};
这样定义即可。动态赋值如下:
map.key3='12';
如果key也是动态的,则如下处理
varkey='key4';
map[key]='34';
注意:在javascript语言中,key的值只能是字符串,不能是其它的。
⑻ js对象数组添加元素
数组有四种定义的方式
使用构造函数:
var a = new Array();
var b = new Array(10);
var c = new Array("first", "second", "third");
或者数组直接量:
var d = ["first", "second", "third"];
扩展:
function ObjStory(id,biaoti,author,type) //声明对象
{
this.ID = id;
this.Biaoti= biaoti;
this.Author= author;
this.Type = type;
}
var arr = new Array();//声明数组,用来存储标题信息
var writer= new ObjStory(11,‘大家去看海’,‘李大胆’,‘文艺类’);//声明对象
arr[0]=writer;//向集合中添加对象
另一种方法:
var Array=[];
Array.push(new ObjStory(12,‘大家去看海’,‘李大胆’,‘文艺类’));
Array.push(new ObjStory(14,‘大家去看天’,‘李小胆’,‘文艺类’));
⑼ 原型原型链与js对象的内存地址的理解
一. js对象的内存地址的解析
注:上面的例子中Object/Function/Array的对比结果都好说,因为他们构建出来的都是新的对象,对象比较是要比较根源(数据是否是同一个)。无论是使用new还是直接调用生成一个新的对象是要开辟新的空间存储的,不会和任何一个对象相等。
js中对象的比较:只有地址相同才相等。 其中地址指的是内存地址,即:在电脑内存中存放的位置。
如:
···
var a = new Object();
var b = new Object();
a.name = "mm";
b.name = "mm";
var c = a;
var d = a;
···
1、a == b //false
2、a == c //true
3、a == d //true
4、b == c //false
5、b == d //false
其中a == b 为false 就是因为其内存地址不同,通俗点理解就是两个东西在堆内存的位置不同。
对于 var a = 1; 其实是建立了一个对象a,但是js并不能直接引用它的值,而其实是在引用对象a所对应的堆的地址。可以理解为:保存在变量对象中的一个地址,该地址与堆内存的实际值相关联。
例:
详细关于JS内存空间的描述请移步: https://blog.csdn.net/pingfan592/article/details/55189622/
二. 原型 原型链
懂了上面关于内存地址的介绍,将更加有利于理解原型与原型链
三. 使用
使用原型对象的好处是让所有对象实例共享他的属性和方法。
例:
参考 《高级程序设计》
问题:1、什么是原型链: ECMAScript中 原型链的基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法。基本的实现是利用构造函数,原型和实例的关系。即是每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型对象的内部指针[[prototype]].由于构造函数,原型和实例存在这样的关系,如果我们让一个原型对象等于另一个构造函数的实例,那么此时这个原型对象将包含一个指向另一个原型对象的指针,这样的话,另一个原型原型中也包含着指向另一个构造函数的指针。如果另一个原型又是另一个类型的实例,那么上面的关系还是会成立。这样层层递进,就够成了实例与原型的链条,这就是所谓的原型链的基本概念。