刚学,求个大佬说下为啥prototype写里面和写外面结果不
javascript吧
全部回复
仅看楼主
level 1
刚学,求个大佬说下为啥prototype写里面和写外面结果不一样啊[小乖]
2020年04月02日 09点04分 1
level 12
function Person() {
Person.prototype = {
constructor: Person,
name: 'name1',
sayhi: function() {
alert('hello: ' + this.name);
}
};
}
/* 如果把 new Person() 改成下面那样 你应该明白吧
* 具体可以百度new干了哪些事
*/
var p = {};
p.__proto__ = Person.prototype; /* __proto__是个隐藏属性 具体可以百度
先把Person原型值进行赋值 也就是 {constructor: Person}
*/
Person.call(p); /* 在call调用 对Person原型进行赋值 但是 p__proto__ 已经是{constructor: Person}
这就是为什么 Person原型 赋值或者添加属性得在外面的原因
*/
p.sayhi(); // error
2020年04月02日 11点04分 3
大佬,我去看了说new的文章,其实还不是很懂,说下我的理解,new创建一个对象,然后把构造函数的原型赋给对象的__proto__属性,然后这个时候函数还没运行,所以__proto__指向的是原本的原型,赋值完后才执行函数重写原型……有不对的地方希望大佬可以纠正,谢谢[小乖]
2020年04月02日 13点04分
@牧瀨紅莉栖▫ 你知道就好了 [乖]
2020年04月02日 13点04分
你这里内部写的东西并不会被new操作执行,因为new操作与对象指定,参数值调用有关,而你这内部并没有与对象指定有关,所以相当于没写
2020年04月20日 05点04分
@雨326后 ??? 你在说什么 我这里就是为了 给楼主理解 才这么写的好吧 我都给楼主说了百度new干了哪些事
2020年04月20日 06点04分
level 1
你在构造函数里面给构造函数的prototype属性赋值 但创建第一个对象的时候 因为new操作要先取构造函数的prototype属性 创建对象 再以对象引用为参数调用构造函数 但是这时候构造函数还从没被调用过 取到的prototype是默认的那个 你看我给的例子 再次new一个persion对象就能调用到protorype里的函数了
2020年04月03日 07点04分 4
我想了挺久想明白了,还是谢谢你[勉强],但是我又遇到新问题了,大佬能看下吗……就是楼下这个……
2020年04月04日 01点04分
level 1
我看着书看到了闭包这里,然后跟着书上的代码敲了敲,但是为什么结果和书上说的完全不一样…我自己加了个括号他又行了……我看的是《JavaScript高级程序设计第3版》……
2020年04月04日 01点04分 5
书上写的是图一这种,说是每个函数都会返回10……但是我这个怎么把代码返回了[啊]……
2020年04月04日 01点04分
@牧瀨紅莉栖▫ 一个是循环完(里面的函数都没调用) 把数组返回 一个是循环时(里面的函数调用了) 在返回数组 在加上var 没块级作用域的原因才导致图1那种结果
2020年04月04日 02点04分
第一个代码片段函数fun返回的是10个闭包函数的数组 你列印数组输出的当然是10个函数的代码 你要想打印他们返回的i就要遍历数组 挨个调用这十个闭包函数 由于这是个闭包函数的作用域都是基于同一个fun函数的作用域上 所以最终输出的数字是一样的
2020年04月04日 03点04分
第二个代码片段 你在fun函数里面先后创建了10个闭包函数 然后立即调用他们 返回当时的i 塞进一个数组里 最终返回包含10个数的数组 但是这样设计例子没有意义 因为这个例子的初衷是要演示函数返回闭包函数
2020年04月04日 03点04分
level 12
function fun() {
var arr = [];
for (var i = 0; i < 10; i++) { // es6 let 有块级作用域 这样可以进行保存 或者用闭包
arr[i] = function() {
return i;
}; // 不要在这里对他进行括号
/*
你这样还不如
a[i] = i;
*/
}
return arr;
}
alert(fun()[9]()); // 10
2020年04月04日 02点04分 6
我明白了,就是我把函数放进数组但是没有执行,所以出来的就是代码,让他执行了就行了,把var改成let就能解决值一样的问题,是这样吗。这本书按es5写的,有些地方不一样好晕人,尤其我这样初学的人[笑尿]
2020年04月04日 02点04分
@牧瀨紅莉栖▫ 书中的 fun返回值 是一个数组 值是函数 var没块级作用
2020年04月04日 03点04分
羡慕大佬
2020年04月21日 01点04分
1