- 主题:javascript 中,函数的原型对象 是啥?
你这有语法错误。
【 在 zzjyingzi (十六点五) 的大作中提到: 】
: 理解javascript是基于对象的,这个就不难理解。
: 因为基于对象,所以才有原型链,变量、方法是挂接在对象上的,在方法中的直接体现就是this的指向,函数默认this指向的对象在浏览器中是window,window默认挂接全局变量和方法,而prototype就是指向对象的API,这样可以将函数的指向对象更换为其他对象,比如可以
: function asd(){
: ...................
--
FROM 183.95.135.*
试一下不就知道了?这么明显的。
【 在 zzjyingzi (十六点五) 的大作中提到: 】
: 哪?
--
FROM 183.95.135.*
注意 对象 的 内置[[Prototype]]条目 和 prototype属性 是不一样的。
为了明确区分二者,我们不妨把[[Prototype]]称为对象的“继承”条目。
函数是对象。所以函数也继承某个东西。比如:
var x=(function f(){});
//则x 继承 Function.prototype。但x.prototype不同于Function.prototype。
//x.prototype继承Object.prototype。
var y=new x;
//y继承x.prototype. y本身没有prototype属性。
【 在 zhanghaoX (环顾四方有效) 的大作中提到: 】
: 每一个函数都包含一个prototype属性,这个属性是指向一个对象的引用,这个对象称
: 做“原型对象” (prototype object )。每一个函数都包含不同的原型对象。
: 那么到底是啥?
: ...................
--
FROM 183.95.135.*
【 在 zzjyingzi (十六点五) 的大作中提到: 】
: 理解javascript是基于对象的,这个就不难理解。
因为基于对象,所以才有原型链,变量、方法是挂接在对象上的,在方法中的直接体现就是this的指向,函数默认this指向的对象在浏览器中是window,window默认挂接全局变量和方法,而prototype就是指向对象的API,这样可以将函数的指向对象更换为其他对象,比如可以
var a = 1;
function asd(){
alert(this.a);
}
asd();//这时候this指向window
asd.prototype.s = function(){
this.a = 2;
alert(this.a);
};
var z = new asd(); //构造之后this就指向新的作用域,这时候函数的this为undefined !!!!!!!!!!!!!!!这句会弹出对话框,之所以对话框里是undefined,不是因为this是undefined而是因为this.a是undefined.
z.s(); //这时候是2.!!!!!!!!!这时候是2的原因是this被动态绑定为z。
【 在 zhanghaoX 的大作中提到: 】
: 那某个函数的原型对象到底是什么?具体的
--
FROM 183.95.135.*
这里的混淆有些是标准的措辞造成的:
1)标准采用了[[Prototype]]和prototype;其实应该采用两个不同的名称
2)内置条目被称为内置属性,与我们平常所说的属性(named property)容易混淆。
为此,
1)内置的“继承谁”的条目应该用个 比如"__proto__"等名称与prototype区分
2)内置条目不要叫做属性。
这样,
我们来看:
首先Object.prototype的__proto__是null. Object.prototype是大多数对象继承的顶端。
Function.prototype的__proto__是Object.prototype。
Object的__proto__是 Function.prototype。
Function的__proto__是Function.prototype。
每个constructor创建的对象都会继承该constructor的prototype。因此Function创建的继承Function.prototype, 因此,所有function,无论是new Function生成的还是function表达式生成的(function 表达式相当于new Function)都是这样。
每个new Function创建出来的function,记为f,都会有一个prototype。f.prototype继承Object.prototype,f.prototype有个constructor属性其值为f;但f.prototype可以被修改(很多情况下作为constructor也应该修改)
【 在 zhanghaoX (环顾四方有效) 的大作中提到: 】
: 发信人: ottffsse (nothing), 信区: WebDev
: 标 题: Re: javascript 中,函数的原型对象 是啥?
: 发信站: 水木社区 (Tue Oct 13 13:53:09 2015), 站内
: ...................
--
FROM 183.95.135.*