function Test(){
this.time='pat';
}
Object.defineProperty(Test.prototype, 'time', {
configurable: true,
get: function () { return 'test'; }
});
var a=new Test();
console.log(a.time); //test
为什么a.time返回值是' test',我很困惑。
答案 0 :(得分:2)
由于time
不是简单属性,因此对它的赋值使用原型上的属性定义。由于原型上的属性是使用 getter 而不是 setter 定义的,因此无法将其分配给。如果你处于严格模式(通常是一个好主意),你会得到一个错误。
构造函数可以在实例上创建一个“自己的”time
属性,而不是简单的赋值;它必须使用defineProperty
来执行此操作:
function Test(){
Object.defineProperty(this, "time", {
writable: true,
enumerable: true,
configurable: true,
value: 'pat'
});
}
Object.defineProperty(Test.prototype, 'time', {
configurable: true,
get: function () { return 'test'; }
});
var a=new Test();
console.log(a.hasOwnProperty("time")); // true
console.log(a.time); //pat
a.time = "updated";
console.log(a.time); //updated
答案 1 :(得分:0)
因为这是您定义要返回的function aiosc_clean_content($string,$html_tags="", $autop = true) {
$string = aiosc_preclean_content($string);
if(empty($html_tags)) $html_tags = "<b><strong><em><i><br><hr><p><span><small><h1><h2><h3><h4><h5><ul><ol><li><a><del><blockquote><pre><code><script>";
$string = strip_tags($string,$html_tags);
if($autop) $string = wpautop($string);
$text = preg_replace_callback("~<code>(.*?)<\/code>~",'replaceInCode',$string);
return $text;
}
function aiosc_preclean_content($string) {
$rplc = array(
"\\'"=>"'",
'\\"'=>'"',
"\\\\"=>"\\",
"‘"=>"'",
"’"=>"'",
"“"=>'"',
"”"=>'"',
);
return str_replace(array_keys($rplc),array_values($rplc),$string);
}
function replaceInCode($match){
$replace = array('<' => '<','>' => '>');
$text = str_replace(array_keys($replace),array_values($replace),$match[1]);
return '<code>'.$text.'</code>';
}
方法的内容。无论你有什么价值,get
返回的函数都是它解析的值。
请参阅:
get
如果您想知道为什么console.log输出新值而不是最初定义的值,那是因为您将Object.defineProperty(Test.prototype, 'time', {
configurable: true,
get: function () { return 'A new value!'; }
});
var a = new Test();
console.log(a.time); //A new value!
设置为重新配置Object.defineProperty
为新值新的实例也是一个新的价值。
您可以自己测试一下:
Test.prototype.time
当你实例化function Test(){
this.time='pat';
}
// This instance will have the old values
var b = new Test();
// Change value returned by Test.time by new Test instances
Object.defineProperty(Test.prototype, 'time', {
configurable: true,
get: function () { return 'A new value!'; }
});
var a = new Test();
console.log(a.time); // A new value!
consoel.log(b.time); // pat
时,你给了你一个带有原始定义的实例。但是,当您实例化b
时,您使用a
的新定义创建了一个实例,这就是为什么它不同的原因。