js之对象的属性
js 中是可以通过 new function 来达到创建对象的实现,好处自不用多说。来段代码演示一下:<script> function student(name, age, sex) { var name = name; this.age = age; sex = sex; } var jack = new student("jack", 14, "男"); alert(jack.name); // undefined alert(jack.age); // 14 alert(jack.sex); // undefined </script>
可以看到在 student 函数内部使用 this 引用赋值的变量是可以使用其对象调用的(如:age),反之却不能被其对象所调用。
为什么会说这个区别呢?这是因为大多数面向对象语言中,在此种这种情况下 this 是可以省去的。如果你已经习惯了 java 或者是 php,那么你写这种 js 时就要多留心了,小心被自己的惯性思维所欺骗。
php中json_encode处理
php 中函数很多,用起来都比较顺手。正是这样,久而久之,就会形成一种只看参数名称,不仔细阅读函数用法的坏习惯。比如,其中的 json_encode , 现在大多数网站是采用 UTF8 编码,这种情况下使用 json_encode 是没有任何问题的,但当网站编码是其他时,这就不好了,如下:
<?php // 字符串 $str = '我是中国人'; $json_str = json_encode($str); var_dump($json_str, json_decode($json_str)); // 对象 class stu { var $age = 10; var $name = '老外'; } $s1 = new stu(); $json_s1 = json_encode($s1); var_dump($json_s1, json_decode($json_s1)); ?>如果上面文件保存为 UTF8 编码时,结果完全正确,如果保存为其他编码时,结果不是你期望的。
其实这个情况,在手册中是有说明的,如下:
待编码的 value ,除了resource 类型之外,可以为任何数据类型
该函数只能接受 UTF-8 编码的数据(译注:指字符/字符串类型的数据)
那么,如果我们的编码不是 UTF8 时就完全不能使用这个功能吗?可以,需要稍加处理,如下:
define('DEFAULT_CHARSET', 'gbk'); function json_safe_encode($var) { return json_encode(json_fix_cyr($var)); } function json_fix_cyr($var) { if (is_array($var)) { $new = array(); foreach ($var as $k => $v) { $new[json_fix_cyr($k)] = json_fix_cyr($v); } $var = $new; } elseif (is_object($var)) { $vars = get_class_vars(get_class($var)); foreach ($vars as $m => $v) { $var->$m = json_fix_cyr($v); } } elseif (is_string($var)) { $var = iconv(DEFAULT_CHARSET, 'utf-8', $var); } return $var; }上面的例子是假设是 gbk 编码的情况,如果是其他编码情况,聪明的你一定知道该怎么搞了吧~~