问题解决了吗
obj.y===3 ; //true; 我不记得老师的视频怎么讲的,这里应该是obj.z===3;
var obj=new foo(); 好像是整个obj被重新赋值了,无法访问obj.x/obj.y ------> 你说的是对的。
prototype属性是构造函数的。而这个又是个对象,包含-proto-。形成原型链的关键。每个对象都有-proto-。而你这里说的是对象字面量,它就Object构造函数的实例。它通过-proto-指针指向Object构造函数的prototpe原型对象。
obj的本身没有z当然要去他原型链里面的看看有没有,如果没有就不能访问,有就可以访问了。
前提是他们在一条原型链中才可以一直访问到顶端的z,不然不行
哈哈,个人建议你最好先看一遍Javascript高级程序设计的前八章,再看这个视频当复习。
浏览器版本越低就是越下,你说向上是啥?
var obj={};
obj[{}]=true;
console.log(obj);//输出Object {[object Object]: true}
var p;
for(p in keys){
console.log("======="+p);//输出=======0,应该证明里面有一个属性
console.log("======="+obj[p])//=======undefined 不知道为什么会这样
console.log("======="+obj[p.toString()])//=======undefined 不知道为什么会这样
}
obj[{x:1}]=false;
console.log(obj);//输出Object {[object Object]: false}
var p;
for(p in keys){
console.log("--------"+p);//输出------0 证明里面有一个属性
}
var o={};
for(p in o){
console.log("++++++++++++++++++++"+p);//无输出,里面没属性
}
console.log(o.toString());
//输出结果[object Object]与输出的Object {[object Object]: false}很相似
o={x:1};
console.log(o)//输出Object {x: 1}和Object {[object Object]: false}也很相似
console.log(o.toString())//同样也是输出[object Object] 注意这里用的是toString(),转成字符串
//把它们两个结合就变成Object {[object Object]: false}了
//然后推测一种可能
//obj[{}]=true; {}不是字符串,js自动调用o.toString()方法,将其转成字符串,因为key只能是字符串
//由上面知道o{} 的 toString()方法输出的是[object Object],所以obj中的[object Object]指向true
//obj[{x:1}]=false; {x:1}不是字符串,js自动调用o.toString()方法,将其转成字符串
//同样的由上面o{x:1} 的toString得到的字符串也是[object Object],
//所以obj中的[object Object](key)被改变为指向false(value);
//有一个问题就是o{x:1} o.toString()为什么输出的不是[String,Number],这个就不是很懂
//最后,我不知道这是对还是错,只是结合上面的输出结果推出来的
//所以如果错了,不干我事
我们把人看成一个对象,这个对象有吃饭,走路的方法,我们不必去研究他是怎么吃饭走路的,因为我们把这些步骤已经封装起来变成一个函数了,你想让这个人吃饭就直接调用吃饭的方法,走路就直接调用走路的方法,而c语言则是面向过程,他的每一个方法都是要一步一步实现的,吃饭要买菜做饭然后才能吃,不能一步到位,这就是它们的区别。面向对象的思想就是把每一个需求看成一个对象,每个对象都有对应的属性和方法,需要这个对象做对应的事则调用已有的方法,这就是我理解的面向对象编程
是直接看成一个字符串了
如果想要达到老师所描述的效果的话,应该是这样的
1. var y=document.getElementById("mess") // y是一个对象 y.innerHTML="错误:"+err+"。" // 改变得是y对象的 2. var y=document.getElementById("mess").innerHTML // y是获取的mess的值,也是一个字符串 y="错误:"+err+"。" // 给y赋值,与mess无关了
One is the object type. Another is the primitive type.
第一句是声明obj对象
第二句是指obj.1=1这个意思,但是1是不合法的标识符,用点是不行的,用[]进行引用才有,例如:obj[x] 等于obj.x
第三句也是 obj.1=2,由于上面有1这个属性了(上面的obj[1] 是等于第二行的obj['1']),,所以将上面的obj.1=1覆盖了,下面的obj属性中就为Object[1:2];
到第四句说的 就是obj对象中的属性,为Object[1:2]
这样上面一解析你应该大概就清楚了不少,那下面也是同理
第五句也是同理 声明对象obj[{}]=true;
第六句 其实跟上面的一样,JavaScript会进行tostring处理,既然toString了,obj[{}] 是等于obj[{x:1}]
俩个是同一个属性
第7句 就是将整个属性输出 将上面的obj.[1]属性输出,也将下面的obj.[{}]属性输出,所以是[1:2,[object Object]]:true
如果你满意的话,给我个好评,我挺喜欢好评的 =——=
因为你的obj根本就没有y属性呀。你new 得出来的这个obj是一个全新的对象,你前面写一个 var obj={},obj.y=2;这时obj是有y属性的,而你后面又是一个 var obj=new fn(); 这时这个obj就会覆盖掉前面的那个obj。
应该是新js规范(ECMAScript 5)上扩展的对象
这些标签是描述属性特征的 在js中是无法直接访问的 因为这些特性都是内部值 ECMAScript的规范是把他们放在两个方括号中的
。。。。。。。。。。。。。。。。。。
以后我就应该多等等再回来回答。。。这样好多问题自己就解决了,哈哈哈哈
感谢网友帮忙回答。
我也不理解你的问题
如何实践。。。这是一个复杂又简单的问题。。。