标签:
在接触JS的过程中,随着理解的深入会逐渐的理解一些比较深奥的理论或者知识,
那么今天我们来介绍一下比较难理解的prototype和constructor。
初步理解:
function
name(obj){
alert(obj)
//"uw3c"
}
name(
"uw3c"
)
这是个普通的自调用的例子,大家都能理解,那么看下一个例子:
function
name(obj){
alert(obj)
//"uw3c"
}
var
test =
new
name(
"uw3c"
)
test();
function
uw3c(){
}
var
test =
new
uw3c();
alert(
typeof
uw3c);
//function
alert(
typeof
test);
//object
function
name(){
alert(JSON.stringify(name.prototype))
//{},是个空对象
}
name();
var
test =
new
name();
alert(JSON.stringify(test.prototype))
//undefined,不存在这个对象
什么是prototype:
var
function
{
prototype:prototype{
constructor:constructor ==
function
}
}
prototype的作用:
function
uw3c(){
}
uw3c.prototype.name =
"a"
;
var
test =
new
uw3c();
alert(test.name)
//"a";
var
test={};
uw3c.call(test);
prototype是继承还是克隆:
prototype的优点:
讲了这么多,大家肯定会问,prototype有什么用处,它有什么优点?看下面代码:
function uw3c(name){
alert("姓名:" + name + ",年龄:" + this.age + ",性别:" + this.sex);
}
uw3c.prototype.age = 15; (共有的)
uw3c.prototype.sex = "man";
var test1 = new uw3c("css");//姓名:css,年龄:15,性别:man
var test2 = new uw3c("js");//姓名:js,年龄:15,性别:man
看完这个例子大家应该明白了,使用prototype既能保留公有性,又能具有私有性。
//------------------------------------
下面实例
function aa(name){
alert(‘姓名:‘ + name + ‘ 年龄:‘ + this.age);
}
aa.prototype.age = 21; (共有的属性)
var test = new aa(‘小芳‘);
var test1 = new aa(‘小明‘);
//结果:姓名:小芳 年龄:21
// 姓名:小明 年龄:21
内容来自:http://www.uw3c.com/jsviews/js12.html
==================================================
给对象新增方法和属性,可以用来开发插件
比如
function aa(){}
aa.prototype.name = ‘小芳‘;
aa.prototype.t = function() {
alert(this.name);
}
var test = new aa();
test.t();
//结果弹出小芳
这样相当于给对象添加了额外的方法和属性
所以没猜错的话jQuery.prototype这里应该是在开发JQuery插件
标签:
原文地址:http://www.cnblogs.com/mjzhang/p/4566780.html