問的不錯!
返回的確切說肯定是個對象.
但是我們可以對他直接像變量一樣操作就是因為這是
系統默認的對象,可以重載為變量.
所以我們可以對他作為object or variable
這個和C++種的string是一個道理
按道理string是一個對象.但是我們可以直接執行
串相加.就是因為編譯的時候做了重載的操作!
返回的確切說肯定是個對象.
但是我們可以對他直接像變量一樣操作就是因為這是
系統默認的對象,可以重載為變量.
所以我們可以對他作為object or variable
這個和C++種的string是一個道理
按道理string是一個對象.但是我們可以直接執行
串相加.就是因為編譯的時候做了重載的操作!
它有对象有的方法比如 getYear();getMonth();getDay()
创建一个新对象。 new constructor[(arguments)] 参数
constructor必选项。对象的构造函数。如果构造函数没有参数,则可以省略圆括号。arguments可选项。任意传递给新对象构造函数的参数。说明
new 运算符执行下面的任务: 创建一个没有成员的对象。
为那个对象调用构造函数,传递一个指针给新创建的对象作为 this 指针。
然后构造函数根据传递给它的参数初始化该对象。
示例
下面这些是有效的 new 运算符的用法例子。 my_object = new Object;
my_array = new Array();
my_date = new Date("Jan 5 1996");
var 语句
声明变量。 var variable1 [ = value1 ] [, variable2 [ = value2], ...] 参数
variable, variable2被声明的变量的名字。value, value2赋给变量的初始化值。说明
使用 var 语句来声明变量。这些变量可以在声明时或声明后在脚本中被赋值。下面是声明的例子:
Jscript 有三种主要数据类型、两种复合数据类型和两种特殊数据类型。主要(基本)数据类型是: 字符串
数值
布尔
复合(引用)数据类型是: 对象
数组
特殊数据类型是: Null
Undefined
var now = new Date()
和
now = new Date()
其实是一回事,只不过now = new Date()是全局变量
而var now = new Date()不是全局变量。
和
now = new Date()一样的,都可以是全局变量
你看我下面的这段程序,如果在now = new Date()前面加上 var
程序就会出错,所以我把 now = new Date()和var now = new Date()
理解成一个是全局的,一个是局部的。
<html>
<head>
<script>
<!--
function test()
{
now = new Date()
}
//-->
</script>
</head>
<script>
<!--
test()
document.write(now.getYear())
//-->
</script>
</html>
<head>
<script>
<!--
function tests()
{
now = new Date()
}
//-->
</script>
</head>
<script>
<!--
tests()
document.write(now.getYear())
//-->
</script>
</html>
我的意思是在 now = new Date() 前面加上 var 即 var now = new Date()
程序就出错了,
var定义的变量作用域在定义它的函数内(如果不出现在函数内就是定义全局的),
不加var表示引用了window的now属性(原来没有的,第一次引用的时候给你加上了的)。你试试下面的,用了var,一样是全局的:<html>
<head>
<script>
var now;
<!--
function tests()
{
now = new Date()
}
//-->
</script>
</head>
<script>
<!--
tests()
document.write(now.getYear())
//-->
</script>
</html>
<head>
<script>
var now=new Date(0);
<!--
function tests()
{
var now = new Date()
}
//-->
</script>
</head>
<script>
<!--
tests()
document.write(now.getYear())
//-->
</script>
</html>函数里var了的now和函数外面的全局变量now现在各不相涉了。
我再试试你的,你的意思是说,即使在变量前面加了 var 只要变量
不在 function里面,那么也是全局的?
还有我觉得变量虽然在 function里面,只要不在变量前面加 var
那么也是全局的,不知我的理解对不对,如我的程序所示。
‘而复合(引用)类型中的“对象”指的应该是Object对象,
二不是一般意义上的“对象”,’ 你这样一说我又糊涂了,你说的”Object对象“和“一般意义上的对象”
有什么不一样吗?
的代码,能理解的。谢谢!
不过我对emu(ston) 大哥说的:”不加var表示引用了window的now属性
(原来没有的,第一次引用的时候给你加上了的)。“
这句话不理解,什么是window的now属性,它又是起到什么作用啊,还望指教!请别笑话,小弟我学JAVASCRIPT才一个星期,
obj.emu = "test";
obj.web = new Function('alert("csdn")');
alert(obj.emu);
obj.web();另一种引用属性的方式是这样:alert(obj["emu"])
alert(emu)
alert(window.emu)因为可以通过window前缀来引用,所以我们也可以吧这个变量看成是window对象的一个属性。
function tests()
{
now = new Date()
}
这显然是相当于
function tests()
{
window.now = new Date()
}所以我说你引用(或者说创建)了window的now属性,而不说你定义了全局变量now
<script>
<!--
function test()
{
now = new Date()
}
//-->
</script>
这时的now的确是一个全局变量,但我以以下的例子来说:
<script>
function fun(){
var now = new Date();
function fun1()
{
now = new Date()
}
}
</script>
这时的now就不是全局变量了,这样的比较应该很好理解吧!JS处理一个没有用VAR来定义的变量是会逐步向上层进行查找,直到它找不到一个已经用VAR定义的相同的变量名时它就会自动把这个变量定义成一个全局变量,否则它就不是全局变量了!
难道Object 和 Object() 是两个不同的对象吗?还是一回事,即它
即是Object对象,又是一般意义上的对象,你这样说,我会理解成对象的
分类有两种:一种是Object对象,另一种是一般意义上的对象。
2、还有,往已经存在的对象里面添加属性和方法,我今天刚学了好像是
"对象名.prototype.新属性名"
怎么又可以这样呢?:
var obj = new Object();
obj.emu = "test";
3、说来惭愧,说到现在,我还是不甚理解
window.now = new Date() 我觉得 now 是 Date() 的一个实例,
怎么又成了window的一个属性?
var now = new Date() now是变量还是对象实例,脑子很糊涂了。
now = new Date() 是window的属性吗?添加属性不是应该
用"对象名.prototype.新属性名"的方式
的吗?
我现在对全局变量的理解就是不在任何function里面定义的变量
就是全局变量,不管变量前面有没有 var.
不过可怜我现在连 var now = new Date() 和 now = new Date()
的 now 到底是什么都搞不清楚,初学难啊! 谢谢大家了,这几天得到了大家的热情帮助,真的很感激啊!
好像就是在定义”类“
Object.prototype.emu2=new Function("alert('test again')");var obj = new Object();alert(Object.emu)
Object.emu2()alert(obj.emu)
obj.emu2()没有类,哪来的对象啊?
var i = 0; 定义了一个数字型的变量,没有属性和方法,要不你给我找出来一个?var i = 0;
for (var j in i)
alert(j)
http://www.zdnet.com.cn/developer/code/story/0,2000081534,39061227-2,00.htm
http://www.zdnet.com.cn/developer/code/story/0,2000081534,39061227-3,00.htm挺不错的文章。
alert(i.toString());
document.write((i.toString()).length)
alert(i.toString)其实js对方法的支持都是通过属性来实现的,如果一个属性的值是一个function对象,我们一般就叫它做方法。
我想,以前大家说的js不支持类其实应该指的都是不支持自定义类。在javascript里面我们自定义类是通过function实现的,其实是实现了一个function类对象。比如:function myClass(){
this.emu="test";
}
alert(myClass)我们看到自己定义的类其实是一个函数,我们使用这个自定义类的时候就把这个函数当成是类的构造方法了。通过这种方式实现的类,自然是假的咯(其实它是一个function类的对象)。但是我认为对系统类Function、Array、Object这些,系统是真正把它们当成class来处理的。可能有人会有疑议:alert(Array)
alert(String)
alert(Function)
alert(Object)
alert(Date)把class打出来,我们看到的仍是一个个的function对象啊,那和自定义的对象有什么不同?我认为alert造成了对toString方法的隐含调用,上面的相当于:alert(Array.toString())
alert(String.toString())
alert(Function.toString())
alert(Object.toString())
alert(Date.toString())而对class,toString这个方法返回的是构造方法的toString。构造方法作为方法当然是一个function对象啦。所以我们不能就此认为js不支持这几个类。假设js真的不支持类,那么我们就只有相信所有对类的支持都是通过function对象实现的。那么我们怎么解释alert(Funtion)的输出:
function Function() { [native code] } 难道说对function对象的支持也是通过function对象实现的,就好像项羽可以抓着自己的头发把自己提起来一样?(耶,过顶神力,我喜欢!)再说了,没有类,那对象是什么怪物呢?