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 时就要多留心了,小心被自己的惯性思维所欺骗。

11
Aug 2013
AUTHOR WiFeng
CATEGORY Web
COMMENTS No Comments

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 编码的情况,如果是其他编码情况,聪明的你一定知道该怎么搞了吧~~


11
Aug 2013
AUTHOR WiFeng
CATEGORY Web
COMMENTS No Comments