运算符混淆的Javascript实例
我读过Javascript的运算符混淆的Javascript实例,javascript,Javascript,我读过Javascript的instanceof操作符,想测试一下。我编写了以下代码: function first(){}; first.prototype.hello=函数hello(){ console.log(“你好”); } var second={}; second.prototype=Object.create(first.prototype); console.log(第一个的第二个实例)//应该输出true 第二,你好 第二个原型被分配了一个新对象 不,这部分错了。您正在创建
instanceof
操作符,想测试一下。我编写了以下代码:
function first(){};
first.prototype.hello=函数hello(){
console.log(“你好”);
}
var second={};
second.prototype=Object.create(first.prototype);
console.log(第一个的第二个实例)//应该输出true
第二,你好代码>
第二个原型被分配了一个新对象
不,这部分错了。您正在创建一个名为“prototype”
的属性,但这并不意味着它是对象的实际原型
var second = {};
second.prototype = ...
相当于
var second = { "prototype": ... };
但这与遗传无关
几乎唯一使用名为“prototype”
的属性的地方就是构造函数(比如你的首先是),即使这样,它也不会被用作函数本身的原型;它被用作以后从newthatfunction()
创建的任何实例的原型
你能做的就是
var second = new first;
// What this does:
// - gets the object from first.prototype
// - creates a new derived object, like Object.create(first.prototype)
// - calls first(), passing the new object as 'this',
// like first.call(Object.create(first.prototype))
// - assigns the object returned from first() to second
// (if first doesn't return an object, it automatically uses the new object created in step 2 instead)
或者(基本相当,但不会先调用)
第二个原型被分配了一个新对象
不,这部分错了。您正在创建一个名为“prototype”
的属性,但这并不意味着它是对象的实际原型
var second = {};
second.prototype = ...
相当于
var second = { "prototype": ... };
但这与遗传无关
几乎唯一使用名为“prototype”
的属性的地方就是构造函数(比如你的首先是),即使这样,它也不会被用作函数本身的原型;它被用作以后从newthatfunction()
创建的任何实例的原型
你能做的就是
var second = new first;
// What this does:
// - gets the object from first.prototype
// - creates a new derived object, like Object.create(first.prototype)
// - calls first(), passing the new object as 'this',
// like first.call(Object.create(first.prototype))
// - assigns the object returned from first() to second
// (if first doesn't return an object, it automatically uses the new object created in step 2 instead)
或者(基本相当,但不会先调用)
不要使用second.prototype
,而是使用second
我已经编辑了你的代码
function first(){};
first.prototype.hello=函数hello(){
console.log(“你好”);
}
var second=Object.create(first.prototype);
console.log(第一个的第二个实例)//应该输出true
第二,你好代码>而不是秒。原型
,使用秒
我已经编辑了你的代码
function first(){};
first.prototype.hello=函数hello(){
console.log(“你好”);
}
var second=Object.create(first.prototype);
console.log(第一个的第二个实例)//应该输出true
第二,你好
Object.create()
需要存储在second
变量中,而不是second.prototype
中。它不返回对象原型,而是返回整个对象本身
var second = {}
second = Object.create (first.prototype)
Object.create()
需要存储在second
变量中,而不是second.prototype
中。它不返回对象原型,而是返回整个对象本身
var second = {}
second = Object.create (first.prototype)
second=newfirst()有什么问题吗?
——这不是你想要实现的吗?这些模式似乎试图将第一个
子类化为类第二个
——但您“做得不对”™我不认为构造函数调用版本有什么问题,但这不是一个实用的代码,它的编写只是为了测试我学到的东西。关于图像,请将它们限制在真正需要图像的东西上。如果您只是在问题中写下“second instanceof first
返回false,而second.hello()
产生Uncaught TypeError:second.hello不是函数
”,并在代码中指出相应的行,second=new first()有什么问题
-这不是你想要实现的目标吗?这些模式似乎试图将第一个
子类化为类第二个
——但您“做得不对”™我不认为构造函数调用版本有什么问题,但这不是一个实用的代码,它的编写只是为了测试我学到的东西。关于图像,请将它们限制在真正需要图像的东西上。如果您只是在问题中写道“second instanceof first
返回false,而second.hello()
产生未捕获类型错误:second.hello不是函数”,并在代码中指出了相应的行。因此,实际原型不能用表达式name.prototype
?@BranTran引用,这是正确的。你可以用它。只是对以后可能读到这篇文章的人说:我的错误是没有理解原型
产权的含义。它(默认情况下)仅存在于函数中,是指向其他对象的链接。将其用于不可调用对象的属性与仅在其上添加新属性相同(没有任何特殊意义)。谢谢大家的支持!因此,实际原型不能用表达式name.prototype
?@BranTran引用,这是正确的。你可以用它。只是对以后可能读到这篇文章的人说:我的错误是没有理解原型
产权的含义。它(默认情况下)仅存在于函数中,是指向其他对象的链接。将其用于不可调用对象的属性与仅在其上添加新属性相同(没有任何特殊意义)。谢谢大家的支持!我也试过这个,当它起作用时,我更加困惑,我也试过这个,当它起作用时,我更加困惑