解决方案 »
- window.getSelection的难题
- 求使用jqgrid所需要的js和css文件(要完整的)Email:[email protected]
- 等待中 急问 jsp中调用js中的一个函数 为什么参数传递不是本身的参数啊
- 过年了,悔不该加班,老板给了个变态任务
- 100分,求助复杂js选择checkbox
- type="text" 中的内容是一条绝对路径,怎样用 javascript判断路径的格式是否正确?
- 有人用javascript做过网站的计数器吗?急
- 如何在浏览器地址栏显示某个站点的地址或域名
- 怎样在网页中应用javascript
- 关于JAVASCRIPT的几点疑惑
- echo 不出POST发来的数据。求助
- jquery dialog open时总是会重新刷新网页
console.log(new A instanceof Object);// true 它也是真呀,原因是 Array 是 object 的子类
A的prototype设成[] 應該改成 A的prototype 設成 Array的prototype
new 關鍵字是產生實例 100%是Object
({}).toString.call(new A) 應該改成 Object.prototype.toString.call(A)樓主應該再對js的prototype加強一下觀念
應該改成 ({}).toString.call(A.prototype)
我搭个顺风车想请教1楼一个问题既然他们都是Array类型那么为什么会有两种显示方式呢?
console.log([].constructor);//[] 的构造器是 Array()根据规定,所有引用类型的值都是Object 的实例。因此,在检测一个引用类型值和Object 构造函数时,instanceof 操作符始终会返回true。也就是console.log(new A instanceof Object);返回真的原因。问题是把(new A)与[](Array)划等号是错误!(new A)是Object实例,只是它的原型改成指向数组而已,与[]压根是两回事。
而且[]的构造器仍是Object;
console.log([].constructor instanceof Object);// true
A.prototype = [];//这句相当于A.prototype = new Array(),相当于A继承了Array,这就是原型链继承
console.log(new A instanceof Array)//因为A继承了Array,所以这句是true
({}).toString.call(new A)//因为A只是继承了Array,拥有Array的一切方法,但本身并不是Array,所以返回[object Object]
instanceof :
举例 a instanceof B,B.prototype在a的原型链上的时候,返回true
对应题主的条件设置,new A instanceof Array,new A instanceof Object是true,new A instanceof Function是false,原因在于A.prototype = [];,没有这句话则new A instanceof Function,new A instanceof Object是true。
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/instanceoftoString
需要看({}).toString 方法时如何实现的,当它的this分别是xxx时,怎么办?查到的结果是与[[Class]]有关。 new Function()时[[Class]]为Function,new Array()时[[Class]]为Array, new A()时该值为Object。
function A(){ return function(){}};
({}.toString(new A())); 是什么呢?答案是Object
function A(){}
new A instanceof Function
false // 这边返回是false呢。。 A instanceof Function
true //这边返回是true
如果是 new A() 本身是没有prototype的
function A(){}
new A instanceof Function
false // 这边返回是false呢。。 A instanceof Function
true //这边返回是true
function A(){}
new A instanceof Function//因为这里你是new A,new出来的是对象。当然会是false
false // 这边返回是false呢。。