考虑这个功能:
function Foo(){
var a = "3";
};
Run Code Online (Sandbox Code Playgroud)
根据__proto__ VS. JavaScript中的原型,
Foo.__proto__ = Function.prototype
Function.prototype.__proto__ = Object.prototype
Run Code Online (Sandbox Code Playgroud)
我理解了这一部分,但如果我在Google Chrome控制台中执行此操作:
Object.__proto__
output: ƒ () { /* native code */ }
Function.__proto__
output: ƒ () { /* native code */ }
Run Code Online (Sandbox Code Playgroud)
Q1:他们为什么指向功能?它们实际上是什么Function
以及Object
它们如何彼此不同,因为Object实际上是一个函数?:
typeof Object
"function"
Run Code Online (Sandbox Code Playgroud)
Q2:如果一切都是JavaScript中的对象,那为什么是Object
函数?另外,如何在JavaScript中实际实现一个函数?在函数内声明的变量会发生什么?函数是否由JavaScript编译器转换为对象?
对不起,如果我错过了一些明显的事 我真的很困惑函数和对象在JavaScript中的实现方式.
考虑以下代码:
function foo(something) {
this.a = something;
}
var obj1 = {};
var bar = foo.bind(obj1);
Run Code Online (Sandbox Code Playgroud)
现在,以下语句不会执行:
bar.prototype.newprop = "new"; // Cannot execute this
Run Code Online (Sandbox Code Playgroud)
据我所知,每个函数都有一个原型对象.那为什么我们不能执行上述声明呢?
而bar确实是我们可以称之为的功能:
bar(2);
console.log(obj1.a); // 2
Run Code Online (Sandbox Code Playgroud) 这是一个纯粹的理论问题.我从'你不知道js'学习javascript,我被困bind
在JS 中的函数实现.考虑以下代码:
function foo(something) {
this.a = something;
}
var obj1 = {};
var bar = foo.bind(obj1);
bar(2);
console.log(obj1.a); // 2
var baz = new bar(3);
console.log(obj1.a); // 2
console.log(baz.a); // 3
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,我们绑定foo()
到obj1
,所以this
在foo()
属于obj1
这就是为什么obj1.a
变成2
当我们调用bar(2)
.但是new
操作员能够优先使用,obj1.a
即使bar(3)
被调用也不会改变new
.
以下是MDN页面提供的polyfill bind(..)
:
if (!Function.prototype.bind) {
Function.prototype.bind = function(oThis) {
if (typeof this !== "function") {
// closest thing possible to …
Run Code Online (Sandbox Code Playgroud) 我的 React 应用程序中有一个ResponsiveBar
组件,但颜色未按预期显示。我已遵循官方文档中的指南。数据如下所示:
{
"data": [
{
"bucket": "Prospects Imported",
"Oliver Queen": 10,
"Oliver QueenColor": "hsl(177.06123087721252,18.89068530574307%,16.53273587631816%)",
"Ray Palmer": 10,
"Ray PalmerColor": "hsl(287.8197874078934,62.18829850513416%,13.604789291455033%)"
},
{
"bucket": "Assigned",
"Oliver Queen": 158,
"Oliver QueenColor": "hsl(130.29946551632844,21.88588940442986%,85.78716216902176%)",
"Ray Palmer": 2,
"Ray PalmerColor": "hsl(192.1716868789712,1.8797192964029374%,7.158239130186517%)"
},
{
"bucket": "Calls Made",
"Oliver Queen": 24,
"Oliver QueenColor": "hsl(164.04170858156496,47.95430493222506%,79.37512126292603%)",
"Ray Palmer": 0,
"Ray PalmerColor": "hsl(38.148811405937096,23.83917214972724%,37.366418973565544%)"
},
{
"bucket": "Emails Sent",
"Oliver Queen": 120,
"Oliver QueenColor": "hsl(316.96830604521773,3.6081626612787465%,54.49458825991964%)",
"Ray Palmer": 0,
"Ray PalmerColor": "hsl(223.97078722168806,98.41710495281106%,47.3590863956761%)"
},
{
"bucket": "Texts …
Run Code Online (Sandbox Code Playgroud) 考虑功能:
function foo() {
console.log(this);
}
foo();
Run Code Online (Sandbox Code Playgroud)
如何只打印this
对象的名称(窗口或全局......等),而不是它的内容?
我正在尝试学习ecmascript的提议类语法并将其与React一起使用,我已经使用带有webpack的babel成功地使用es6渲染了组件.现在我想在构造函数之外声明的类中使用实例属性.例如:
class MyComponent extends React.Component{
constructor(props){
super(props)
}
property1= "new property";
func1= ()=>{
}
}
Run Code Online (Sandbox Code Playgroud)
在尝试执行此类操作时,我在'property1'和'func1'上收到错误"意外令牌".另外,我在webpack中使用babel预设的react和babel-preset-env插件.
我想限制在我的班级中使用"this"关键字,所以我认为较新的es7类可以实现,我该怎么做?任何帮助,将不胜感激.
编辑1:如答案所示,我包含了"babel-preset-stage-2"预设,我能够在类中包含构造函数之外的变量,但必须使用'this'来引用它们.