JavaScript Arguments对象

2011-11-23 No Comments

Arguments对象是在函数执行时期动态创建的,它是一个类似数组的对象,可通过索引获取成员,拥有length属性。 arguments.length 表示实参总数,与此对应的行参总数可通过funcName.length获得。 arguments.callee 是对函数本身的引用,在ES5中严格模式下禁止使用。参考callee 。 把arguments转换成数组[].slice.call(arguments, 0)。 function foo() { var args = [].slice.call(arguments, 0); console.log(args); // [1, 2, 3] } foo(1, 2, 3); arguments对象是不能被delete的。 arguments与实参之间是引用关系。 实参是无法被delete的,而arguments的成员可以delete,但是delete之后,实参和arguments成员的引用关系也就丢失了。 function foo(x) { delete arguments; // false  arguments[0] = 11; // arguments[0]: 11, x: 11 x = 22; // arguments[0]: 22, x: 22 delete arguments[0]; // delete 之后丢失引用 x = 33 » » »阅读更多

Ruby: 在cookie中保存对象

2011-01-27 No Comments

在Ruby中使用Cookie非常简单,需要用到CGI模块。下面是一个简单的示例: #!/usr/bin/env ruby require "cgi" cookie = CGI::Cookie.new('name' => 'username', 'value' => 'david', 'expires' => Time.now + 3600) 一般来说,cookie和session保存的都是字符串,其它类型的数据类型会强制转换成字符串的形式,所以,如果想要要在cookie或session保存对象数据,必须先将其转化成比特流形式,访问的时候再将其转换成对象的形式,这样才能在cookie或session中传递对象数据。 Ruby中提供了Marshal模块达到上述的功能。其中主要用到的是dump和load方法。dump方法用来生成比特流,load方法将比特流转化成对象的形式。 class User attr_reader :name, :sex def initialize(name, sex) @name = name @sex = sex end end user = User.new('david', 'male') user_s = Marshal.dump(user) # 处理成比特 » » »阅读更多

学习面向对象的JavaScript

2010-04-21 No Comments

以下是我对《精通JavaScript》学习的记录,理解有误之处敬请指正。 “引用”是一个指向对象实际位置的指针。多个变量可以同时指向同一个对象。对象的修改会直接影响到引用对象的变量。JavaScript里的结果是沿着引用链一直上溯到原来那个对象。请看下面的示例。 <script type="text/javascript"> var items = new Array('one', 'two', 'three'); var itemsRef = items; var itemsRef1 = itemsRef; items.push('four'); // 修改items数组 document.write('itemsRef1 = ' + itemsRef1 + '<br />'); // one,two,three,four itemsRef1.push('five'); // 对itmesRef的修改可以直接影响items和itemsRef document.write('items = ' + items + '<br />'); // one,two,three,four,five items = ''; // 重新构建items对象,并没有对itemsRef及itemsRef1构成影响 document.write('itmes = ' + items + '<br />'); // items返回空 document.wr » » »阅读更多